小编Amb*_*jee的帖子

win32 api编辑控件和键盘加速器

我在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消息呢?

c keyboard winapi

6
推荐指数
1
解决办法
940
查看次数

标签 统计

c ×1

keyboard ×1

winapi ×1