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と表示されます。
非常に困っていますよろしくお願いします。
お礼
回答ありがとうございます。 CString csBuf; GetWindowText(csBuf); とコーディングすることで、文字列を取得できました。 エディットボックスの入力チェックは これで無事完了です。 原因は、無限ループの様でした。 よく考えると、サブクラス化したのに、 GetDlgItem(IDCxxx)->GetWindowText(csBuf); だと、無限ループしちゃいますね。 どうも、ありがとうございました。