碉堡了,MFC窗体之间的相互控制

shnaying1945 2013-09-30 09:04:38
窗体1被窗体2弹出,然后根据窗体1的按钮点击事件来控制窗体2的控件。
网上瞧了瞧,大概有几种:
(1)
HWND hwnd=(GetDlgItem(IDD_DIALOG2))->GetSafeHwnd();
CButton *check=(CButton *)::GetDlgItem(hwnd,IDC_CHECK1);
check->SetCheck(1);

(2)
((CButton*)(GetParent()->GetDlgItem(IDC_CHECK1)))->SetCheck(1);

(3)
先获得HWND
CWnd * pCWnd=GetDlgItem(IDD_DIALOG2);
HWND hwnd=pCWnd->m_hWnd;

貌似是正确的方法,执行都是错误的,因为GetDlgItem的时候发生了“无法读取内存”现象,结果是pCWnd或者hwnd或者GetParent()读取结果都是0.

没用过这些方法,也不知道是不是正确的,貌似是正确的,但也不知道在我这里就出不来。
望大神指点,谢谢。
...全文
166 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
shnaying1945 2013-10-01
  • 打赏
  • 举报
回复
引用 5 楼 gz_qmc 的回复:
PostMessage,其他都椒扯淡
那么肯定?PostMessage不是传递个消息?怎么控制控件。 而且你否定别人的也说说理由呀。
modyaj 2013-10-01
  • 打赏
  • 举报
回复
引用 2 楼 shnaying1945 的回复:
这样做很局限啊,假如我又想通过窗体2控制窗体1的控件,这时就不能循环声明了。况且,假如该窗体内容很丰富,作为其他窗体的成员对象就要占用很大的资源,貌似。
此时你可以获取父窗口的句柄 然后就能控制窗口1了 当然 也可以用消息映射啊!
gz_qmc 2013-10-01
  • 打赏
  • 举报
回复
PostMessage,其他都椒扯淡
gz_qmc 2013-10-01
  • 打赏
  • 举报
回复
引用 7 楼 shnaying1945 的回复:
[quote=引用 5 楼 gz_qmc 的回复:] PostMessage,其他都椒扯淡
那么肯定?PostMessage不是传递个消息?怎么控制控件。 而且你否定别人的也说说理由呀。[/quote] 窗口类有很好的封装,自己控件自己控制有啥不好? 窗口类有完善的消息系统, 要控制某窗口的控件,想该窗口发送控制消息,他自己控制有啥不好
shnaying1945 2013-10-01
  • 打赏
  • 举报
回复
假设CMyDialog为对话框类 1.先在CMyDialog.cpp中声明一个全局变量CMyDialog* pDlg; 2在OnInitDialog()的时候,pDlg = this; 3.在别的类使用他的时候,在别的类的Cpp中添加extern CMyDialog* pDlg; 4.pDlg->yourfunction(); 突然发现这方法不错,因为现在也没找到或使用更好的办法。
shnaying1945 2013-09-30
  • 打赏
  • 举报
回复
引用 3 楼 zhangTwei 的回复:
设置全局指针分别指向这两个窗口; 然后就可以根据指针互相调用内部的按钮等类别;
还能详细点吗?全局指针似乎没用过,但知道那是什么东西。
zhangTwei 2013-09-30
  • 打赏
  • 举报
回复
设置全局指针分别指向这两个窗口; 然后就可以根据指针互相调用内部的按钮等类别;
shnaying1945 2013-09-30
  • 打赏
  • 举报
回复
这样做很局限啊,假如我又想通过窗体2控制窗体1的控件,这时就不能循环声明了。况且,假如该窗体内容很丰富,作为其他窗体的成员对象就要占用很大的资源,貌似。
Universe_Admin 2013-09-30
  • 打赏
  • 举报
回复
将窗体2作为窗体1的成员对象吧,这样靠谱点

15,979

社区成员

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

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