读书人

MFC 子对话框跟父对话框通信

发布时间: 2012-10-26 10:30:59 作者: rapoo

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();     }} 

读书人网 >VC/MFC

热点推荐