子对话框的回车键如何屏蔽掉?
环境:VS2008 MFC 单文档 FormView
问题:在对话框中,我添加了多个子对话框作为界面,点击按钮切换显示。现在问题是如果我在子对话框的编辑框中按回车键,子对话框就消失了(子对话框的OK键,取消键已删除)。。。。请问该怎么把子对话框的回车键屏蔽,同时按回车键时,选择按主对话框的确定键?
添加子对话框代码:
- C/C++ code
CRect rt; m_groupBoxRight.GetWindowRect(&rt); this->ScreenToClient(&rt); rt.DeflateRect(1,1,1,1); if(m_tabBasicSet.m_bSelected == TRUE) { m_dlgBasic.ShowWindow(SW_SHOW); m_dlgMeasure.ShowWindow(SW_HIDE); m_dlgShow.ShowWindow(SW_HIDE); m_dlgBasic.MoveWindow(&rt); } else if(m_tab_set1.m_bSelected) { m_dlgBasic.ShowWindow(SW_HIDE); m_dlgMeasure.ShowWindow(SW_SHOW); m_dlgShow.ShowWindow(SW_HIDE); m_dlgMeasure.MoveWindow(&rt); }[解决办法]
提供一种思路:
PreTranslateMessage截获回车消息,return掉即可
楼下继续
[解决办法]
1、取消IDOK按钮的默认属性,就可以将对话框的回车键屏蔽
2、响应IDOK按钮的WM_COMMAND消息,PostMessage(GetParent(hChildDlg),WM_CLOSE,0,0);
[解决办法]
BOOL CxxxDlg::PreTranslateMessage(MSG* pMsg)
if ( (pMsg->message == WM_KEYDOWN) && ( pMsg->wParam == VK_RETURN ))
return TRUE;
可能主对话框和子对话框都要
[解决办法]
- C/C++ code
BOOL CTestDlg::PreTranslateMessage(MSG* pMsg){ // TODO: 在此添加专用代码和/或调用基类 if(pMsg->message == WM_KEYDOWN && pMsg->wParam == VK_RETURN && pMsg->hwnd != GetDlgItem(IDOK)->GetSafeHwnd()) return TRUE; return CDialog::PreTranslateMessage(pMsg);}