如果希望希望按下回车键时焦点移到下面一个EDIT框而对话框不关闭,需要映射PreTranslateMessage(MSG* pMsg)函数并作处理,如下: BOOL Cprint::PreTranslateMessage(MSG* pMsg) { // TODO: Add your specialized code here and/or call the base class if(pMsg->message == WM_KEYDOWN ) { CWnd * m_pwnd = CWnd::GetFocus(); int nID = m_pwnd->GetDlgCtrlID(); switch (pMsg->wParam) { case VK_RETURN : if ( nID != IDOK && nID != IDCANCEL ) pMsg->wParam = VK_TAB; break; case VK_DOWN : pMsg->wParam = VK_TAB; break;
case VK_UP : GetNextDlgTabItem(m_pwnd,TRUE)->SetFocus() ; break; } }
return CDialog::PreTranslateMessage(pMsg); }
或者在PreTranslateMessage里面判断键盘消息 switch(msg.message) { case WM_KEYDOWN: switch(msg.wParam): { case VK_RETURN: case VK_ESCAPE: return; } }
/* 加入两个哑函数OnOK和OnCancel */
/*----------------------------------------------------------*/void CDlg::OnOK()
{
}void CDlg::OnCancel()
{
}
BOOL Cprint::PreTranslateMessage(MSG* pMsg)
{
// TODO: Add your specialized code here and/or call the base class
if(pMsg->message == WM_KEYDOWN )
{
CWnd * m_pwnd = CWnd::GetFocus();
int nID = m_pwnd->GetDlgCtrlID();
switch (pMsg->wParam)
{
case VK_RETURN :
if ( nID != IDOK && nID != IDCANCEL )
pMsg->wParam = VK_TAB;
break; case VK_DOWN :
pMsg->wParam = VK_TAB;
break;
case VK_UP :
GetNextDlgTabItem(m_pwnd,TRUE)->SetFocus() ;
break;
}
}
return CDialog::PreTranslateMessage(pMsg);
}
switch(msg.message)
{
case WM_KEYDOWN:
switch(msg.wParam):
{
case VK_RETURN:
case VK_ESCAPE:
return;
}
}
{
if(pMsg->message == WM_KEYDOWN && pMsg->wParam == VK_RETURN)
return NULL;
return CDialog::PreTranslateMessage(pMsg);
}