0
case WM_KEYDOWN:
    if ( !(wParam >= 'A' && wParam <= 'Z') && !(wParam >= '0' && wParam <= '9') )
    {
        cout << (char)wParam << endl;
        cout << wParam << endl;
    }

我已经过滤掉了字母数字输入,只接受符号,但我不知道如何通过 wParam 输出符号。任何想法?

4

2 回答 2

0

wParam转换为char是不安全的,WM_KEYDOWN因为它可能是虚拟键码,其中一些(如箭头键)属于可打印字符的范围。

其次,看起来您正在编写一个 GUI 应用程序,因此您不会看到cout.

解决这两个问题后,使用ispunct函数。

于 2013-06-05T10:29:54.773 回答
0

您只是使用了错误的Windows 消息。WM_KEYDOWN 报告虚拟键,而不是字符。TranslateMessage() 使用当前键盘状态和活动键盘布局将虚拟键转换为字符。状态很重要,因为修饰键是否处于活动状态(Shift、Alt、Control)很重要。布局很重要,因为不同的语言将键盘键映射到不同的字符。WM_KEYDOWN 只对快捷键有用。比如F1。

请改用 WM_CHAR。

于 2013-06-05T11:11:29.137 回答