case WM_KEYDOWN:
if ( !(wParam >= 'A' && wParam <= 'Z') && !(wParam >= '0' && wParam <= '9') )
{
cout << (char)wParam << endl;
cout << wParam << endl;
}
我已经过滤掉了字母数字输入,只接受符号,但我不知道如何通过wParam输出符号。有什么想法吗?
答案 0 :(得分:0)
将wParam
WM_KEYDOWN
转换为char是不安全的,因为它可能是虚拟键代码,其中一些(如箭头键)属于一系列可打印字符。
其次,看起来你正在编写一个GUI应用程序,所以你不会看到cout
的输出。
解决这两个问题后,请使用ispunct
函数。
答案 1 :(得分:0)
您只是使用错误的 Windows消息。 WM_KEYDOWN报告虚拟键,而不是字符。 TranslateMessage()使用当前键盘状态和活动键盘布局将虚拟键转换为字符。状态很重要,因为如果修改键处于活动状态,Shift,Alt,Control则很重要。布局很重要,因为不同的语言将键盘键映射到不同的字符。 WM_KEYDOWN仅对快捷键击有用。像F1一样。
改为使用WM_CHAR。