我想使用此虚函数拦截对话框中按钮单击事件比如IDSAVE,当单击此按钮时,我想获得此ID,并且关闭对话框后返回此ID我是在此函数中使用:
if (pMsg->message==WM_COMMAND)
{
    UINT uiSel=LOWORD(pMsg->wParam);
    switch(uiSel)
    {
       case IDSAVE:
            EndDialog(uiSel);
            return true;
    }
}但是运行时根本进不到if里面去

解决方案 »

  1.   

    呵呵
    是SDK编程吗
    消息拦截很容易出问题的
    关注!
      

  2.   

    重载PreTranslateMessage(MSG* pMsg)函数BOOL CMyDialog::PreTranslateMessage(MSG* pMsg)
    {
    if (pMsg->message==WM_COMMAND)  // 或者将WM_COMMAND该为WM_LBUTTONDOWN试试!
       if(pMsg->hwnd==this->GetDlgItem().m_Button) // 看是不是掉了这句!   {
           UINT uiSel=LOWORD(pMsg->wParam);
           switch(uiSel)
           {
           case IDSAVE:
                EndDialog(uiSel);
                return true;
           }
       }
    }
      

  3.   

    BOOL CTest2Dlg::OnCommand(WPARAM wParam, LPARAM lParam) 
    {
    // TODO: Add your specialized code here and/or call the base class
    GetDlgItem(wParam)->EnableWindow(FALSE);

    return CDialog::OnCommand(wParam, lParam);
    }其中wParam即控件ID
      

  4.   

    BOOL CCsdn14dlgDlg::PreTranslateMessage(MSG* pMsg) 
    {
    if (pMsg->message==WM_LBUTTONDOWN)
    {
    if(GetDlgItem(IDC_BUTTON1)->GetSafeHwnd() == pMsg->hwnd)
    EndDialog(IDOK);
    }

    return CDialog::PreTranslateMessage(pMsg);
    }
      

  5.   

    ---------------------------
    技术上可行
    符合你的要求吗?
    如果不明白
    请给我发短消息
    请附: 帖子的地址
    或在
    http://www.338888.com/VCShare/Default.asp
    上提问
      

  6.   

    WM_COMMAND并不进入队列,而是直接调用窗口函数.
     你可以重载CWnd::WindowProc