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