1.子对话框中调用CMainFrame类和CView类
通常调用是在View类中调用对话框的对象,但是大多时候还是需要在子对话框中调用View类中的成员变量,那么我们如何获取View类的指针?在这里存在一个互相包含的问题——View类中包含子对话框的头文件,子对话框中包含View类的头文件。直接包含将会引起错误,如何解决这个问题,下面会解决这个问题。
首先子对话框中调用CView对象指针有两种方法:
准备工作:
首先需要在对话框的头文件中声明View类:
在对话框的头文件中添加下面一条语句:
class NW104View;//类的前向声明
然后在对话框的.cpp文件中添加包含语句
#include "MainFrm.h"
#include "NW104Doc.h"
#include "NW104View.h"
(1)通过全局对象获取CView对象的指针
定义一个View指针:
CNW104View *m_pMyView = (CNW104View *)((CMainFrame *)theApp.GetMainWnd())->GetActiveView();
m_pMyView->messageDlg = NULL;
其中messageDlg为View类成员变量,这样就可以调用View类中的成员。
(2)通过CMainframe获取CView对象的指针
添加头文件
#include "MainFrame.h"
CMainFrame *pmain = (CMainFrame *)AfxGetApp()->m_pMainWnd;
CNW104View *pview = (CNW104View *)pmain->GetActiveView();
pview->messageDlg = NULL;
其中messageDlg为View类中的成员变量。
(3)对话框关闭时各个函数调用
(1)点击IDOK按钮退出:先调用OnOK(),然后是OnDestory(),最后是PostNcDestroy() (2)点击IDCANCEL按钮退出:先调用OnCancel(),然后是OnDestory(),最后是PostNcDestroy() (3)点击右上角的关闭按钮退出:先OnClose(),然后是OnCancel(),再然后是OnDestory() ,最后是PostNcDestroy()