0

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

  • 如果没有在快捷键表中定义,我可以在 WinForm 对话框中检测到其他键盘快捷键
  • 如果编辑对话框也是 MFC,我想我也可以为此对话框定义和加载加速器,然后使用 ProcessMessageFilter
  • 在 WinForm 中,我尝试了覆盖 ProcessCmdKey 和监听 KeyDown 事件均无济于事

您是否认为有一种方法可以在 WinForm 子项中接收这些按键?

4

2 回答 2

0

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

Form.Show(IWin32Window owner)

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

于 2015-02-06T15:47:28.430 回答
0

我认为在 WinForm child 中定义自己的消息循环可能会起作用。例如

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

我猜当您在 WinForm 上键入 CTRL + F 时,消息将由主消息循环(即您的 MFC 大型机应用程序)检索,并且由于焦点位于 WinForm 上,因此它不会执行任何操作。如果您有自己的 WinForm 消息循环和加速键,那么它可能会起作用。

于 2013-09-09T10:39:11.810 回答