2016-03-20 5 views
1

属性がES_NUMBERの編集ボックスがあります。ボタンのプレスで、編集ボックスの値が2〜15(両端を含む)かどうかを確認しようとしています。ロジックテスト用のWinAPIの編集ウィンドウからintを正しく抽出する

StackOverflowでチェックしたところ、atoi()ではなくstrtol()を使用するよう強く推奨されていましたが、どちらも正常に必要なチェックを実行できませんでした。現在のコードを下に見てください。

char buff[1024]; 
GetWindowText(hWndNoOfTeams, (LPWSTR)buff, 1024); 
int i; 
i = strtol(buff,NULL,10); 
    if ((i > 1)&&(i < 16)){ 
      MessageBox(hWnd, (LPCWSTR)buff, L"MSGBOX", MB_OK); 
    }else{ 
      MessageBox(hWnd, L"The number of teams must be greater than 1 and less than 16.", L"MSGBOX", MB_OK); 
    }; 

このテストは、0と9の間で正しく動作しますが、それ以上の場合、常に2番目のメッセージボックスが表示されます。文字列から整数を抽出する方法に問題があるのは疑いがあります。すべての値についてはbuff配列に正しい値が含まれています。

私は明らかに明白でなければならない何かを逃した場合は謝罪します。

答えて

0
GetWindowText(hWndNoOfTeams, (LPWSTR)buff, 1024); 

LPWSTRまたはLPSTRまたはそれに関連したものには何もキャストしてはいけません。コンパイラはGetWindowText()charの配列ではなく、WCHARの配列であるワイド文字列を要求していると伝えています。すべての新しいWindowsプログラムは、Unicode対応である必要があります。は、ワイド文字APIがデフォルトで読み込まれます。

wcstol()のようなワイド文字列用の変換ルーチンがあります。

詳細については、UNICODEおよび_UNICODEのマクロとWindowsでのUnicode処理を参照してください。

0

あなたはWin32 API関数のUnicodeバージョンを使用しているので、あなたは、Unicode文字バッファとstrtolはのUnicodeバージョンを使用する必要があります()と一致します

WCHAR buff[1024] = {0}; 
GetWindowText(hWndNoOfTeams, buff, 1024); 
int i = wcstol(buff, NULL, 10); 
if ((i > 1) && (i < 16)) { 
    MessageBox(hWnd, buff, L"MSGBOX", MB_OK); 
} else { 
    MessageBox(hWnd, L"The number of teams must be greater than 1 and less than 16.", L"MSGBOX", MB_OK); 
}; 
関連する問題