对话框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){}但是传递消息过程中总出错,为什么呢?还有什么其他好的方法达到这种传递的目的吗?谢谢
解决方案 »
- 如何下载网页中表格数据?
- HL7通信
- 如何把二进制数组数据批量的保存到数据库,采用ADO方式
- rand() 如何随机产生一个 0 - 9 的数字 ?
- 如何单击除了窗口标题栏以外的区域使窗口移动
- VC编译时遇到的问题。明明头文件里有声明,编译时就是不认
- 求助:调节窗口大小,在线等待
- 数据库难题(出100分),请教高手!!!!
- 给大家带来一个好消息!!
- ★★ 请问如何把CString转化成CTime?谢谢 ★★
- 怎样才能去掉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为父窗口指针。