我不太清楚为什么会发生这种情况。我只是试图输出按下的键。断点显示存储在按下变量中的正确字母。项目设置为Unicode。C++ Win32 MessageBox奇怪的输出
case WM_CHAR:
{
const wchar_t pressed = LOWORD(wParam);
::MessageBox(hWnd, &pressed, L"Key Pressed", MB_OK);
}
我不太清楚为什么会发生这种情况。我只是试图输出按下的键。断点显示存储在按下变量中的正确字母。项目设置为Unicode。C++ Win32 MessageBox奇怪的输出
case WM_CHAR:
{
const wchar_t pressed = LOWORD(wParam);
::MessageBox(hWnd, &pressed, L"Key Pressed", MB_OK);
}
我想通了这个问题。我认为MessageBox继续显示超过wchar_t变量的内存地址的内存项目。我必须将该字母转换为wstring,然后将其传递给MessageBox。
解决问题的原因是因为std :: wstring类自动终止了字符串。所有C字符串必须以空字符('\ 0')结尾,这就是它知道它找到了字符串的结尾。 'MessageBox'函数没有什么不同,因为它是一个C函数。阅读以了解更多关于以空字符结尾的字符串。但是,尽可能地尽量多忘记,因为在C++中,你应该总是使用'std :: wstring'或'std :: string'。 – 2013-03-16 07:06:29
显示什么? – Caesar 2013-03-16 02:42:37
我不太确定。它看起来像是一长串重复的日本符号或其他东西。 – Emrys90 2013-03-16 02:43:30
你正在传递'按下'的地址不是它的值我需要 – Kevin 2013-03-16 02:44:58