ご教授願います。
○開発環境
: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;
}
}
==============================================================
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);
}
微妙に動きが違うかもしれませんが、こんなんでどうでしょう。
てんさん、レスありがとうございます。
レスが遅れて申し訳ありません。
OSが壊れてずっと戦っていました。
おかげでソースがすっきりとまとまりました。
ありがとうございました。