我建立一个对话框,当回车的时候,从第一个编辑框跳到第二个编辑框,代码如下:
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返回的值到底有什么作用,大家有评价,说的有里有分啊。

解决方案 »

  1.   

    return TRUE; 应该是说明消息已经处理过,不需要继续// 看看调用栈中上一层的代码
    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
    }
      

  2.   

    如果这个消息满足:
    pMsg->message==WM_KEYDOWN&&pMsg->wParam == VK_RETURN
    则无须调用基类的
        CDialog::PreTranslateMessage(pMsg);如果消息不满足:
        则必须调用基类的这个函数
      

  3.   

    return到底它的作用有多少的。
      

  4.   

    对呀,如果是你想截获的消息,就你自己处理掉了,然后返回TRUE表示已经处理了;如果不是,你当然还要调用默认的消息处理函数啦,否则对话框收到的其它所有消息不是没人处理了?当然就没有响应了!
      

  5.   

    return;
    是不是就是return (1);的意思呀???
      

  6.   

    当 PreTranslateMessage 返回 TRUE 时,将不再执行
    TranslateMessage 和 DispatchMessage见THRDCORE.CPP中的部分代码:
    BOOL CWinThread::PumpMessage()
    {
      ......
      if ( ...... && !PreTranslateMessage(&m_msgCur))
    {
    ::TranslateMessage(&m_msgCur);
    ::DispatchMessage(&m_msgCur);
    }
      ......
    }
      

  7.   

    return表示函数执行到这个地方就返回嘛