对话框上有编辑框(RichEdit),其他按钮,在编辑框输入后,本意是回车键就将输入内容发送出去,但是回车键就是捕不到,始终响应的换行。编辑框用一个CWnd包装,加到对话框上,在对话框中PreTranslateMessage,根本就不进来。我不太明白这个消息流程是怎么的。比如说一个对话框,上面添加一个控件,那么按键时,消息是先走对话框,然后再排到具体的控件上去?好心人,解释下,谢谢。
调试欢乐多
BOOL CXXXDlg::PreTranslateMessage(MSG* pMsg)
{
// TODO: Add your specialized code here and/or call the base class
if(GetDlgItem(IDC_EDIT1)->GetSafeHwnd() == pMsg->hwnd && WM_KEYDOWN == pMsg->message && VK_RETURN == pMsg->wParam)
{
AfxMessageBox(_T("Enter Press!"));
}
return CDialog::PreTranslateMessage(pMsg);
}
但是我这里,情况可能特殊些,PreTranslateMessage根本就不进来,这点不是很明白。
PreTranslateMessage是必然执行的?怎么做可以让消息不进来?
if (pMsg->message == WM_KEYDOWN) {
if (GetDlgItem(IDC_EDIT1)==GetFocus())
{
if( pMsg->wParam==VK_RETURN)
{
AfxMessageBox(_T("按键成功")); }
}
}
你的意思,明白,只是怎么去响应按钮点击?焦点在EDIT的时候,根本都不响应按钮,那岂不是还是没有效果?
virtual BOOL PreTranslateMessage(MSG* pMsg);
.cpp中是:
BOOL CxxxxDlg::PreTranslateMessage(MSG* pMsg)
微软为了产生PreTranslateMessage(MSG* pMsg)在MFC中让所有的对话框都用Create,即都是非模态的,MFC的模态对话框是模拟出来的。所以PreTranslateMessage(MSG* pMsg)是一定有的。
可以用OnKeyDown捕获到回车消息