对话框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){}但是传递消息过程中总出错,为什么呢?还有什么其他好的方法达到这种传递的目的吗?谢谢
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){}但是传递消息过程中总出错,为什么呢?还有什么其他好的方法达到这种传递的目的吗?谢谢
解决方案 »
- 我要存储的和处理的数大于DWORD的最大值,该如何,VC++中有处理64位长整型的数吗?
- vc
- 请教下 怎么实现像迅雷一样在CListCtrl嵌入CTreeCtrl
- 求解:vc6.0的几个工程中如何引用同一个磁盘文件,这样不用手动维护多个文件!
- Listen问题
- VC使用ADOX获取数据库中某个表的主键和外键信息
- 如何添加afx_msg BOOL ONDynSplit(),谢谢大家帮助
- 请教 在 Access中改时间不通过
- 请教关于串口通信的问题,紧急求助!A,B(计算机) 连接后, 是A写到B的串口COM,还是B到A的COM去读取呢?
- 请问给位大虾拨号上网,怎样取得主机的IP!急!!!
- 怎样才能去掉CControlBar类的控制条上的"关闭"按钮?或者屏蔽掉该关闭按钮的消息,使点击关闭按钮无效!
- MDI程序.主框架和子窗口都是FormView来的。子窗口固定大小。如何给主框架添加滚动条
这很标准啊。
原因是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为父窗口指针。