我已经在基本的 UI 问题上苦苦挣扎了一段时间。我有一个父窗口和几个子窗口。对于子窗口,例如按钮(BS_CHECKBOX 样式)和编辑,我无法处理按下 ESC 键事件的任何消息。我可以对子窗口进行子类化,但这似乎只是为了处理一个事件而太过分了。我还有一个 listview child ,由于某种原因我可以正确处理 VK_ESCAPE 。我还检查了spy++,发现当按下 ESC 键(并且子窗口处于焦点状态)时,没有消息发送到父窗口。如果我将 spy ++设置为仅记录子消息,则会为按键生成正确的消息 - 它们只是不会传递给父级。有什么想法(不)做什么?
主窗口循环:
MSG Msg;
while (GetMessage(&Msg, NULL, 0, 0))
{
TranslateMessage (&Msg);
DispatchMessage (&Msg);
}
父级 WndProc 中用于处理 ListView 按键的工作代码:
case WM_NOTIFY:
switch (((LPNMHDR)lParam)->code)
{
case LVN_KEYDOWN:
if (((LPNMLVKEYDOWN)lParam)->wVKey == VK_ESCAPE)
Exit();
break;
}
break;
谢谢
克拉
最佳答案
实现此目的的一种方法是在将其分派(dispatch)到焦点窗口之前在消息循环中捕获它,例如:
MSG Msg;
while (GetMessage(&Msg, NULL, 0, 0))
{
if (Msg.message == WM_KEYDOWN && Msg.wParam == VK_ESCAPE)
{
// process escape key
}
else
{
TranslateMessage(&Msg);
DispatchMessage(&Msg);
}
}
当然还有其他方法可以做到这一点,但这是一个非常简单的解决方案。
关于c - 如何处理父窗口中的所有按键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13622651/