VC中窗口指针的关系以及相互调用

来源:互联网 发布:mysql root登录不了 编辑:程序博客网 时间:2024/05/16 11:26

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




0 0
原创粉丝点击