我建立一个对话框,当回车的时候,从第一个编辑框跳到第二个编辑框,代码如下:
BOOL CMyDlg::PreTranslateMessage(MSG* pMsg)
{ if(pMsg->message==WM_KEYDOWN&&pMsg->wParam == VK_RETURN)
{
CEdit* m_secondEdit=(CEdit*)GetDlgItem(IDC_EDIT2);
m_secondEdit->SetFocus();
return TRUE;
}
return CDialog::PreTranslateMessage(pMsg);
}
当我删出return TRUE的时候,回车程序退出了,当我删出了return CDialog::PreTranslateMessage(pMsg);执行程序没有任何响应了,return返回的值到底有什么作用,大家有评价,说的有里有分啊。
BOOL CMyDlg::PreTranslateMessage(MSG* pMsg)
{ if(pMsg->message==WM_KEYDOWN&&pMsg->wParam == VK_RETURN)
{
CEdit* m_secondEdit=(CEdit*)GetDlgItem(IDC_EDIT2);
m_secondEdit->SetFocus();
return TRUE;
}
return CDialog::PreTranslateMessage(pMsg);
}
当我删出return TRUE的时候,回车程序退出了,当我删出了return CDialog::PreTranslateMessage(pMsg);执行程序没有任何响应了,return返回的值到底有什么作用,大家有评价,说的有里有分啊。
BOOL PASCAL CWnd::WalkPreTranslateTree(HWND hWndStop, MSG* pMsg)
{
ASSERT(hWndStop == NULL || ::IsWindow(hWndStop));
ASSERT(pMsg != NULL); // walk from the target window up to the hWndStop window checking
// if any window wants to translate this message for (HWND hWnd = pMsg->hwnd; hWnd != NULL; hWnd = ::GetParent(hWnd))
{
CWnd* pWnd = CWnd::FromHandlePermanent(hWnd);
if (pWnd != NULL)
{
// target window is a C++ window
if (pWnd->PreTranslateMessage(pMsg))
return TRUE; // trapped by target window (eg: accelerators)
} // got to hWndStop window without interest
if (hWnd == hWndStop)
break;
}
return FALSE; // no special processing
}
pMsg->message==WM_KEYDOWN&&pMsg->wParam == VK_RETURN
则无须调用基类的
CDialog::PreTranslateMessage(pMsg);如果消息不满足:
则必须调用基类的这个函数
是不是就是return (1);的意思呀???
TranslateMessage 和 DispatchMessage见THRDCORE.CPP中的部分代码:
BOOL CWinThread::PumpMessage()
{
......
if ( ...... && !PreTranslateMessage(&m_msgCur))
{
::TranslateMessage(&m_msgCur);
::DispatchMessage(&m_msgCur);
}
......
}