【发布时间】:2013-12-11 09:09:02
【问题描述】:
我正在用 win32 api 编写一个简单的记事本编辑器(定制以适应一些额外的功能)。编辑控件填满应用程序区域并始终保持焦点。我还需要处理一些键盘命令,例如 Ctl-S。所以我以通常的方式使用键盘加速表来定义 Ctl-S 键,在我的消息循环中我有 TranslateAccelerator
while (GetMessage(&Msg,NULL,0,0)>0)
{
if (!TranslateAccelerator(Msg.hwnd,HAccel,&Msg))
{ TranslateMessage(&Msg); DispatchMessage(&Msg); }
}
现在我的问题是,由于编辑窗口始终具有焦点,当用户键入 Ctl-S 时,我根本没有收到 WM_COMMAND 消息。 (我知道 wParam 的 HIWORD 将变为 1 用于键盘加速器,但这不是问题。
case WM_COMMAND:
switch (LOWORD(wParam))
{
...
case ID_CTL_S_PRESSED: {My code here} break;
...
}
如果我尝试没有编辑控件的代码,那么我会收到上面的 WM_COMMAND 消息。那么,当编辑控件始终具有焦点时,如何获取键盘加速器的 WM_COMMAND 消息?
【问题讨论】: