窗口间的消息传递

kevin0716 2009-09-08 09:18:52
对话框1对应类CGatewayPrgDlg,对话框2对应类CEditIPDlg

CGatewayPrgDlg中有两个变量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 + 2000

ON_MESSAGE(WM_GWIPCHANGE,&CGatewayPrgDlg::OnRecvIPChange)
afx_msg LRESULT OnRecvIPChange(WPARAM wParam, LPARAM lParam);
LRESULT CGatewayPrgDlg::OnRecvIPChange(WPARAM lParam,LPARAM wParam){}

但是传递消息过程中总出错,为什么呢?还有什么其他好的方法达到这种传递的目的吗?谢谢
...全文
156 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
yiluqingfeng 2009-09-09
  • 打赏
  • 举报
回复
帮顶
pady_pady 2009-09-09
  • 打赏
  • 举报
回复
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为父窗口指针。
kevin0716 2009-09-08
  • 打赏
  • 举报
回复
找到问题了 明天给出原因 谢谢!~
kevin0716 2009-09-08
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 dirdirdir3 的回复:]
ON_MESSAGE(WM_GWIPCHANGE,OnRecvIPChange)
[/Quote]

这个是对的,但是我写的那个是vs2005允许通过的
dirdirdir3 2009-09-08
  • 打赏
  • 举报
回复
ON_MESSAGE(WM_GWIPCHANGE,OnRecvIPChange)

15,980

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧