在StdAfx.h中定义:
#define   WM_MYBTMSG WM_USER+112 
在发送消息为:
void CTape::Ontuichu() 
{
// TODO: Add your control notification handler code here
KillTimer( 1 );
CConsoleTestDlg::shuaxin();
HWND  hwnd = ::GetDlgItem(this->GetSafeHwnd(), IDD_CONSOLETEST_DIALOG);
::SendMessage(hwnd, WM_MYBTMSG,0,0);   //发送消息
CDialog::OnOK();
}
接收消息的头文件里:
定义: afx_msg void OnMyBtMessage(WPARAM  wParam, LPARAM  lParam);
在CPP文件里定义:
ON_MESSAGE(WM_MYBTMSG,OnMyBtMessage) 与:
void CConsoleTestDlg::OnMyBtMessage(WPARAM  wParam, LPARAM  lParam)
{
HWND  hwnd = ::GetDlgItem(this->GetSafeHwnd(), IDC_BTN_REDIAL);
::EnableWindow(hwnd, true);

为什么不响应消息呀?

解决方案 »

  1.   

    HWND  hwnd = ::GetDlgItem(this->GetSafeHwnd(), IDD_CONSOLETEST_DIALOG);你发给了CTape窗口,不是CConsoleTestDlg窗口,当然收不到消息
      

  2.   

    要不你把消息处理函数放CTape中,要不你把CConsoleTestDlg类的指针传到CTape中,然后
    CConsoleTestDlg *pTestDlg;
    HWND  hwnd = ::GetDlgItem(pTestDlg->GetSafeHwnd(), IDD_CONSOLETEST_DIALOG);
    ::SendMessage(hwnd, WM_MYBTMSG,0,0);  //发送消息 
      

  3.   

    void CTape::Ontuichu() 
    {
    // TODO: Add your control notification handler code here
    KillTimer( 1 );
    CConsoleTestDlg::shuaxin();
    CConsoleTestDlg * tempDlg;
    HWND  hwnd = ::GetDlgItem(tempDlg->GetSafeHwnd(), IDD_CONSOLETEST_DIALOG);
    ::SendMessage(hwnd, WM_MYBTMSG,0,0);   //发送消息
    CDialog::OnOK();
    }
    这么写还是没用呀。怎么回事?谢谢
      

  4.   

    tempDlg你地址都没传过来,怎么用呀?
      

  5.   

    CConsoleTestDlg *pTestDlg; 
    HWND  hwnd = ::GetDlgItem(pTestDlg->GetSafeHwnd(), IDD_CONSOLETEST_DIALOG); 
    ::SendMessage(hwnd, WM_MYBTMSG,0,0);  CConsoleTestDlg *pTestDlg; 
    ::SendMessage(pTestDlg->m_hWnd, WM_MYBTMSG,0,0); 
      

  6.   

    GetDlgItem()的用法都是错的!它的用途是获取指定对话框上的控件的句柄
    HWND  hwnd = ::GetDlgItem(this->GetSafeHwnd(), IDD_CONSOLETEST_DIALOG);
    你这句的意思是:获取CTape(this所指对话框)这个对话框对象上的ID为IDD_CONSOLETEST_DIALOG的空间的
    句柄!IDD_CONSOLETEST_DIALOG显然是个对话框的ID,在CTap上怎么会有拥有这个ID的控件呢?
    返回的句柄肯定不对!
    如果要正确的发送,要看你这两个类的具体调用关系:
    CTap和CConsoleTestDlg