确定WM_KEYDOWN的 wParam 是否可打印
Determine whether WM_KEYDOWN's wParam is printable
我正在尝试在窗口的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
不会发送到窗口,所以我无法在那里执行)。
感谢
既然大多数通常被认为"可打印"的键都是连续的,为什么不使用一些if语句来决定如何处理它们呢?在WM_KEYDOWN中,决定密钥是否"可打印",如果是,则将其激发到WM_CHAR。
你正在研究的功能并不是为这个特定的目的而设计的,所以具有讽刺意味的是,你可能会花更多的时间来研究它们,而不是自己制定一个特别的解决方案。
您的方法#3应该适用于此。在PreTranslateMessage
中,处理WM_KEYDOWN
:
BYTE keyboardState[256];
::GetKeyboardState(keyboardState);
WORD ascii;
int len = ::ToAscii(wParam, (lParam >> 16) & 0xFF, keyboardState, &ascii, 0);
if (len == 1)
{
/* it's printable */
printf("%c", ascii & 0xFF);
}
相关文章:
- 只需要知道我在c ++中打印模式的方式是否有效,或者有另一种方法可以有效地做到这一点
- 有没有办法搜索向量的元素,<String>然后检查它是否包含特定的字符,如果它确实打印了它
- 我的 if 语句打印在我的 while 循环中的每个 if 语句上,无论它是否为假
- 是否有一个标准函数可以打印/监视stdin文件的内容,同时将数据留在stdin中
- 是否可以让 Bitset 将位打印到一行?
- 什么样的 GCC 优化可能会根据是否打印来更改双精度?
- 是否打印指向已定义 int 的成员指针
- QGraphicsItem::p aint(): 如何检查 QGraphicsScene 是否已打印
- 在打印浮点数之前检查浮点数是否为偶数
- 是否有一个很好的方法可以在C 11中打印出像JSON一样的Trie结构(仅迭代解决方案)的扁平命名空间
- 是否有任何操纵器将枚举值打印为字符串?
- C 是否可以使用宏从称呼的地方进行类函数打印
- TCP是否支持不可打印的字符
- CLion 会自动从标准输入打印回输入,是否有任何解决方法
- 是否有任何打印2D阵列C 的快捷方式
- cout.put() 是否推荐使用 cout<< 打印字符
- C++中是否已经有一些类可以打印到 cout,但在未定义某些宏时可以关闭(例如 DEBUG)
- 是否可以在控制台中使用C打印孟加拉语
- C++ 成员变量值根据是否打印出来而变化
- 如何控制是否打印空格