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