c++ - 从 WinAPI 中的编辑窗口正确提取 int 以进行逻辑测试

标签 c++ winapi

我有一个具有属性 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);

切勿将任何内容转换为 LPWSTRLPSTR 或与之相关的任何内容。编译器告诉您 GetWindowText() 需要一个宽字符串,它是一个 WCHAR 数组,而不是一个 char 数组秒。默认情况下加载宽字符 API,因为所有新的 Windows 程序应该都支持 Unicode。

宽字符串有单独的转换例程,例如 wcstol()

查看 Windows 上的 UNICODE_UNICODE 宏以及 Unicode 处理以获取更多信息。

关于c++ - 从 WinAPI 中的编辑窗口正确提取 int 以进行逻辑测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36119599/

相关文章:

c++ - 如何将 wParam 转换为 CString?

c++ - 如何在 C++ 中调整图像大小?

c++ firebase 段错误,linux,在 std::string::assign 无法访问地址 0xf 处的内存

c++ - 中断函数调用与普通函数调用

C++ 时间操作函数

c++ - 为什么对 CreateWindow 的调用会失败,我该如何解决?

c++ - 是否可以初始化具有相同名称但末尾数字不同的变量?

c# - 对旧的第三方控件使用 UI 自动化

c - 什么 *(DWORD_PTR*)&functionA = functionB( var1, var2);做?

c++ - WM_CTLCOLORSTATIC "Access is Denied",C++ WINAPI