对话框1对应类CGatewayPrgDlg,对话框2对应类CEditIPDlgCGatewayPrgDlg中有两个变量a、b,本意是单击对话框1的按钮后,弹出对话框2,在其中可以向text控件输入a、b的新值
void CGatewayPrgDlg::OnBnClickedBtnadvancededit()
{
// TODO: 在此添加控件通知处理程序代码
CEditIPDlg *dlg=new CEditIPDlg(this,1);
dlg->DoModal();
}
为了传递消息,我在CEditIPDlg中定义了CWnd* m_pWnd,主要是在构造函数中保留CGatewayPrgDlg的this指针以便传消息CEditIPDlg::CEditIPDlg(CWnd* pWnd,BOOL flag)
: CDialog(CEditIPDlg::IDD, NULL)
{
m_pWnd=pWnd;
}
//重载这个构造函数主要是为了和下面的构造函数区别
CEditIPDlg::CEditIPDlg(CWnd* pParent /*=NULL*/)
: CDialog(CEditIPDlg::IDD, pParent)
{}单击对话框2的"确定"按钮即可以向CGatewayPrgDlg传递消息,从而改变a、b的值
m_pWnd->SendMessage(WM_GWIPCHANGE,0,0);  //向CGatewayPrgDlg发送消息
其中已在.h .cpp文件中定义并响应了该消息
#define WM_GWIPCHANGE  WM_USER + 2000ON_MESSAGE(WM_GWIPCHANGE,&CGatewayPrgDlg::OnRecvIPChange) 
afx_msg LRESULT OnRecvIPChange(WPARAM wParam, LPARAM lParam);
LRESULT CGatewayPrgDlg::OnRecvIPChange(WPARAM lParam,LPARAM wParam){}但是传递消息过程中总出错,为什么呢?还有什么其他好的方法达到这种传递的目的吗?谢谢

解决方案 »

  1.   

    ON_MESSAGE(WM_GWIPCHANGE,OnRecvIPChange) 
      

  2.   

    ON_MESSAGE(WM_GWIPCHANGE,&CGatewayPrgDlg::OnRecvIPChange)
    这很标准啊。
    原因是DoModal(); 阻碍消息传递了。
    void CGatewayPrgDlg::OnBnClickedBtnadvancededit() 

    // TODO: 在此添加控件通知处理程序代码 
    CEditIPDlg *dlg=new CEditIPDlg(this,1); 
    dlg->Create(...);
    //一定要重写CEditIPDLG的PostNcDestroy(){delete this;} 并重写OnCancel(){DestroyWindow();}

    其实你已经传了父窗口指针了,可以在CGatewayPrgDlg中使用一个方法直接修改m_ip;
    当需要修改里候直接在CEditIPDlg调用p->SetIP(...);//p为父窗口指针。