2013-03-16 35 views
0

我不太清楚为什么会发生这种情况。我只是试图输出按下的键。断点显示存储在按下变量中的正确字母。项目设置为Unicode。C++ Win32 MessageBox奇怪的输出

case WM_CHAR: 
    { 
     const wchar_t pressed = LOWORD(wParam); 
     ::MessageBox(hWnd, &pressed, L"Key Pressed", MB_OK); 
    } 
+0

显示什么? – Caesar 2013-03-16 02:42:37

+0

我不太确定。它看起来像是一长串重复的日本符号或其他东西。 – Emrys90 2013-03-16 02:43:30

+0

你正在传递'按下'的地址不是它的值我需要 – Kevin 2013-03-16 02:44:58

回答

0

我想通了这个问题。我认为MessageBox继续显示超过wchar_t变量的内存地址的内存项目。我必须将该字母转换为wstring,然后将其传递给MessageBox。

+0

解决问题的原因是因为std :: wstring类自动终止了字符串。所有C字符串必须以空字符('\ 0')结尾,这就是它知道它找到了字符串的结尾。 'MessageBox'函数没有什么不同,因为它是一个C函数。阅读以了解更多关于以空字符结尾的字符串。但是,尽可能地尽量多忘记,因为在C++中,你应该总是使用'std :: wstring'或'std :: string'。 – 2013-03-16 07:06:29