检测主机mfc加速器吞下的WinForm中的键盘快捷键

时间:2013-09-09 09:41:47

标签: winforms mfc accelerator

我有一个MFC MDI应用程序,它将Ctrl-F定义为键盘加速器。 这个应用程序托管一个WinForm对话框。我的问题是我想要从这个子WinForm对话框中捕获Ctrl-F,但是MFC主机似乎正在吞下它。

  • 我可以在WinForm对话框中检测其他键盘快捷键,如果它们未在加速器表中定义
  • 如果编辑对话框也是MFC,我想我也可以为这个对话框定义和加载加速器,然后使用ProcessMessageFilter
  • 在WinForm中我试过重写ProcessCmdKey并监听KeyDown事件无济于事

你认为有一种方法可以在WinForm孩子中接收那些按键吗?

2 个答案:

答案 0 :(得分:0)

我认为在WinForm子项中定义自己的消息循环可能会有效。 e.g。

    while(true) {
        Message m;
        GetMessage(out m);
        if (m.Msg == WM_QUIT) 
break;
        DispatchMessage(m);
      }

我想当你在WinForm上键入CTRL + F时,主消息循环即你的MFC主机应用程序检索消息,因为焦点在WinForm上,它不会做任何事情。如果你有自己的WinForm消息循环和加速键,那么它可能会有效。

答案 1 :(得分:0)

我找到了一个有效的解决方案。 显示c#WinForm时,请使用重载

Form.Show(IWin32Window owner)

并将MFC主机Hwnd作为所有者传递。 现在一切都按预期工作了。