キー入力 – プログラミング – Home

通知
すべてクリア

[解決済] キー入力


エースで4番
 エースで4番
(@エースで4番)
ゲスト
結合: 20年前
投稿: 2
Topic starter  

ご教授願います。
○開発環境
:win2k pro
:VC++ 6.0

○やりたいこと
PreTranslateMessageでキー入力取得し
テキストボックスコントロールに表示されている
文字列の一番左の文字と一致していたら
その一文字を消して再表示させるプログラムを作っています。

○質問
下記のようなソースを書いたのですが(一応成功)、
PreTranslateMessageで取得したコードを
いちいちchar型に変換してコンペアする以外に
なにか方法はないのでしょうか?
また、PreTranslateMessage以外に使えるものがあれば
教えていただきたいです。

==============================================================
BOOL CxxxxDlg::PreTranslateMessage(MSG* pMsg)
{
:      //CxxxxDlg=CDialogの派生

TypeString(pMsg->wParam);

:
return CDialog::PreTranslateMessage(pMsg);
}
void CxxxxDlg::TypeString( int key )
{
char cC[2];
CString strWord;
ChangeCode(key,cC);
m_Word.GetWindowText( strWord );
if(strWord.Find(cC[0])==0){
strWord = strWord.GetBuffer( nStrBufSize ) + 1;
m_Word.SetWindowText( strWord );
}
if(strWord == ")
{
:
}

}
void CxxxxDlg::ChangeCode( int key, char* cC )
{
test=key;
switch(key){
case 0x41: strcpy(cC,a);break;
case 0x42: strcpy(cC,b);break;
:
case 0x5a: strcpy(cC,z);break;
case 0xbd: strcpy(cC,-);break;
default:break;
}
}
==============================================================


引用未解決
トピックタグ
てん
 てん
(@てん)
ゲスト
結合: 20年前
投稿: 3
 

BOOL Cxxx::PreTranslateMessage(MSG* pMsg)
{
if(pMsg->message == WM_CHAR) {
int c;
CString str;
c = pMsg->wParam & 0xff; // いらないかも

if((c >='a' && c<='z') || (c >='A' && c<='Z') || c=='-') {
m_edit.GetWindowText(str);
if( str.GetAt(0) == c) {
m_edit.SetWindowText(str.Mid(1, str.GetLength()));
return TRUE;
}
}
}
return CDialog::PreTranslateMessage(pMsg);
}

微妙に動きが違うかもしれませんが、こんなんでどうでしょう。


返信引用
エースで4番
 エースで4番
(@エースで4番)
ゲスト
結合: 20年前
投稿: 2
Topic starter  

てんさん、レスありがとうございます。

レスが遅れて申し訳ありません。
OSが壊れてずっと戦っていました。

おかげでソースがすっきりとまとまりました。
ありがとうございました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました