我有一个具有属性 ES_NUMBER
的编辑框,按下按钮时我试图检查编辑框的值是否在 2 到 15(含)之间。
检查 StackOverflow 后,我发现强烈建议使用 strtol()
而不是 atoi()
,但是两者都没有成功地让我执行必要的检查.请参阅下面的当前代码。
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 之间正常工作,但是,除此之外它总是显示第二个消息框。我怀疑问题在于从字符串中提取整数的方法,至于所有值,buff
数组都包含正确的值。
如果我遗漏了一些本应非常明显的内容,我们深表歉意。
最佳答案
GetWindowText(hWndNoOfTeams, (LPWSTR)buff, 1024);
切勿将任何内容转换为 LPWSTR
或 LPSTR
或与之相关的任何内容。编译器告诉您 GetWindowText()
需要一个宽字符串,它是一个 WCHAR
数组,而不是一个 char
数组秒。默认情况下加载宽字符 API,因为所有新的 Windows 程序应该都支持 Unicode。
宽字符串有单独的转换例程,例如 wcstol()
。
查看 Windows 上的 UNICODE
和 _UNICODE
宏以及 Unicode 处理以获取更多信息。
关于c++ - 从 WinAPI 中的编辑窗口正确提取 int 以进行逻辑测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36119599/