1と表示させたいが12と表示される
windows XP VC++.net 2003です。
よろしくお願いします。
症状は毎回コピーアンドペーストでプログラムを書くよりも
関数化してソースをきれいにしようと思い
BOOL ButtonNumber (int bNumber,HWND hWnd)
{
long z;
char sBuff[100];
char number[100];
wsprintf(number,"%d",bNumber);
z = GetWindowText(GetDlgItem(hWnd,IDC_EDIT1),sBuff,99);
if(z == 0){
SetWindowText(GetDlgItem(hWnd,IDC_EDIT1),number);
return TRUE;
}
if(z == 10){
//桁数が多すぎる警告メッセージ
MessageBox(NULL,"桁数が多すぎます。","警告",MB_OK);
return TRUE;
}
z = atol(sBuff);
wsprintf(sBuff,"%d1",z);
SetWindowText(GetDlgItem(hWnd,IDC_EDIT1),sBuff);
return TRUE;
}
という関数を作りました。
numberに1という数字が入っていてエディットボックスに1と表示されるはずなのですが12と表示されてしまいます。
ためしにnumberに12と入れてみると表示されるのが122
123と入力すると1232と表示されてしまいます。
SetWindowText(GetDlgItem(hWnd,IDC_EDIT1),number);
どこも間違っていないように思いますが・・なんででしょう・・
関数化せずmainに直接書き込んでいけば正常に1と表示されます・
switch (LOWORD(wParam))
{
case IDC_BUTTON1:
ButtonNumber(1,hWnd);
case IDC_BUTTON2:
a = GetWindowText(GetDlgItem(hWnd,IDC_EDIT1),sBuff,99);
if(a == 0){
SetWindowText(GetDlgItem(hWnd,IDC_EDIT1),"2");
return TRUE;
}
if(a == 10){
//桁数が多すぎる警告メッセージ
MessageBox(NULL,"桁数が多すぎます。","警告",MB_OK);
return TRUE;
}
a = atol(sBuff);
wsprintf(sBuff,"%d2",a);
SetWindowText(GetDlgItem(hWnd,IDC_EDIT1),sBuff);
return TRUE;
この場合BUTTON1は12と意図しない表示をしますが
BUTTON2はちゃんと2と表示されます。
非常に困っていますよろしくお願いします。
お礼
Wr5 さん回答ありがとうございました。 WM_CHAR では通知されるタイミングが合わないことがわかりま した。 EN_UPDATE での方法も考えてみます。とりあえずは、下のように F6 を押したときに () が入るようにしました。 int nStartChar, nEndChar; CEdit *edit1 = (CEdit *) GetDlgItem(IDC_EDIT1); if(pMsg->message==WM_KEYDOWN){ if(pMsg->wParam == VK_F6) { edit1->GetSel(nStartChar, nEndChar); edit1->SetSel(nStartChar, nEndChar); edit1->ReplaceSel("()"); edit1->SetSel(nStartChar-1, nEndChar-1); } }