【发布时间】:2014-04-19 10:46:39
【问题描述】:
我试图在我的窗口的WM_KEYDOWN 消息中检测不可打印的字符,但迄今为止的研究没有产生任何结果。我尝试了以下方法:
- 1:
iscntrl(wParam),对方向键不起作用 - 2:
ischar(wParam),这也不适用于相同的键 - 3:
ToAscii(wParam, MapVirtualKey(wParam, 0) ...),还是不行
IMO 第三种方法应该可以工作,因为箭头键不在任何 ASCII 或 Unicode 表上。
问题是我想将键码和字符都发送给我的事件处理程序。由于WM_CHAR 是在WM_KEYDOWN 之后发布的,如果密钥不可打印,我只想发送WM_KEYDOWN 中的密钥(因为WM_CHAR 不会发送到窗口,所以我不能在那里做)。
谢谢
【问题讨论】:
-
MapVirtualKey() 的参数错误,请改用 MAPVK_VK_TO_CHAR。不使用 WM_CHAR 是不明智的,您的消息循环无法解决任何问题。
-
有时无法使用 WM_CHAR,因为对话框的控件处理关键消息,而对话框从不接收它。