如何防止 MFC 对话框处理 Enter 和 Esc 键而不将其传递

Kur*_*urt 5 apache-flex mfc

我们有一个 C++ 应用程序,它在 MFC 对话框中托管一个 flex 应用程序。一切正常,所有按钮按下等都直接传递给 flex,没有任何问题,除了 Enter 和 Esc 键,这会立即关闭对话框。

我们可以通过实现PreTranslateMessage()OnOK() 阻止窗口关闭行为来捕获回车键,但是我们仍然存在将这些回车键推送进一步传递给托管 flex 应用程序的问题。

表单上没有“默认”按钮或类似的东西,也许 MFC 正在将回车键链接到幕后标题栏中的关闭按钮或其他东西。

有没有人知道我们如何阻止 MFC 将回车键视为特殊情况。

非常感谢您的任何提示。

编辑:这是PreTranslateMessage()mmonem 要求的。

BOOL CFlexDialog::PreTranslateMessage(MSG* pMsg)
{
  if ((pMsg->message == WM_KEYDOWN))
  {
    if (pMsg->wParam == VK_RETURN)
    {
      m_ctrlFlex->OnReturnKeyPressed();
      return TRUE;
    }
  }
  return __super::PreTranslateMessage(pMsg);
}
Run Code Online (Sandbox Code Playgroud)

但这不是一个合适的解决方案,像这样在 flex 应用程序中调用一个方法,因为它让 flex 开发人员生活太困难,这意味着他必须编写一个特殊的版本来实现每个控件的返回键行为。

我们只是想让 MFC 像对待其他所有键一样对待返回和转义键。

Jus*_*Boo 1

MFC 命令按钮即使没有焦点也可以响应事件。

您是否尝试过捕获 OnClicked 事件和 OnOk 事件而不返回任何内容?

示例:捕获 OnClick...

   无效 CMyDialog::OnClickedMyOK()
   {
      CDialog::OnOK();
   }

然后在 OnOk() 中执行无操作

无效 CMyDialog::OnOK()
{
}

这应该会阻止回车键被处理。