MFC 子对话框和父对话框通信
(1)我现在是在一个对话框里面【不是主对话框,包含了子对话框的头文件】,新建了另外一个对话框。然后父对话框调用子对话框时没有问题的,但是子对话框调用父对话框有什么号的方法吗?
(2) 在网上找到了一种方法,就是子对话框中定义一个变量,在父对话框创建子对话框的时候,保存父对话框指针,如下
Child->m_pParent = this;
Parent->m_Child = new Child;
在子对话框中申明父对话框,class Parent【没有保护头文件,以前记得csdn上面有人说过这样使用】,可是编译的时候出现Parent没有定义,请问下我的理解哪里有问题?这个怎么解决,求高手帮忙了
[解决办法]
class Parent;
在cpp里声明一下
[解决办法]
子对话框调用父对话框
CParentDlg *pParent;
pParent=(CParentDlg *)GetParent();
[解决办法]
GetParent()可以,但是慎用,因为很多人分不清楚结构就会出错的。(非常容易)
最好的方法:
子窗体有个变量指针,你父窗体在建立子窗体的时候(例如Create之后)
就把父窗体指针this给附给子窗体。
子窗体要使用的时候可以选择是否强转。获取其中的函数和方法
[解决办法]
一个在头文件中包含,一个在cpp文件中包含,这样就不会冲突。。按照我说的 没错的。
[解决办法]
- C/C++ code
/*使用观察者模式,以下为一个简单的sample,随手写的,木有调试,思路大概就是这个样子*//*parent.h*/#include "child.h"class CParent : CObserver{ public: // 实现观察者类的纯虚函数 void ChangeEvent();};/*parent.cpp*/#include "parent.h"void CParent::ChangeEvent(){}// 某个函数定义子窗口... // 传递Parent指针到子窗口 CChild child(this); child.DoModal();.../*child.h*/// 观察者类class CObserver{ // 延迟到子类实现这个函数 virtual void ChangeEvent() = 0;};class CChild{ public: // Child构造时接收parent指针 CChild(CObserver* pOberser); // 调用Parent方法 void InvokeParent(); private: CObserver* m_pOberser;};/*child.cpp*/#include "child.h"CChild::CChild(CObserver* pOberser){ m_pOberser = pOberser;}void CChild::InvokeParent(){ if (m_pOberser != NULL) { // 虚函数特性,不多解释了 m_pOberser->ChangeEvent(); }}