我们有一个 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 像对待其他所有键一样对待返回和转义键。
MFC 命令按钮即使没有焦点也可以响应事件。
您是否尝试过捕获 OnClicked 事件和 OnOk 事件而不返回任何内容?
示例:捕获 OnClick...
无效 CMyDialog::OnClickedMyOK()
{
CDialog::OnOK();
}
然后在 OnOk() 中执行无操作
无效 CMyDialog::OnOK()
{
}
这应该会阻止回车键被处理。