MFC中App,Doc,MainFrame,View各指针的互相获取

首先说明这四个类的

执行顺序是:App->Doc->MainFrame->View

消息响应顺序是:View->Doc->MainFrame->App

 1 // App中获取其它三项指针
 2 void CSDIApp::OnApp()
 3 {
 4     // App
 5     // Doc
 6     CDocument *pDoc = ((CFrameWndEx *)m_pMainWnd)->GetActiveDocument();//成员变量CFrameWndEx m_pMainWnd
 7     // MainFrame
 8     CFrameWndEx *pMain = (CFrameWndEx *)AfxGetMainWnd();
 9     // View
10     CView *pView = ((CFrameWndEx *)m_pMainWnd)->GetActiveView();
11 }
12
13 // Doc中获取其它三项指针
14 CSDIDoc::CSDIDoc()//构造函数
15 {
16     // App
17     CWinAppEx *pApp = (CWinAppEx *)AfxGetApp();
18     // Doc
19     // MainFrame
20     // Doc的创建先于MainFrame
21     // View
22     // Doc的创建先于View
23 }
24 void CSDIDoc::OnDoc()
25 {
26     // App
27     // 同构造函数
28     // Doc
29     // MainFrame
30     CFrameWndEx *pMain = (CFrameWndEx *)AfxGetMainWnd();
31     // View
32     CView *pView= (CView *)pMain->GetActiveView();
33     POSITION pos = GetFirstViewPosition();
34     pView = GetNextView(pos);
35 }
36
37 // MainFrame中获取其它三项指针
38 CMainFrame::CMainFrame()//构造函数
39 {
40     theApp.m_nAppLook = theApp.GetInt(_T("ApplicationLook"), ID_VIEW_APPLOOK_VS_2005);
41     // App
42     CWinAppEx *pApp = (CWinAppEx *)AfxGetApp();
43     // Doc
44     // 构造函数里无法得到当前激活的Doc
45     // MainFrame
46     // View
47     // 构造函数里无法得到View指针,因为Main先于View创建。
48 }
49 void CMainFrame::OnMain()
50 {
51     // App
52     // 同构造函数
53     // Doc
54     CDocument *pDoc = (CDocument *)GetActiveDocument();
55     // MainFrame
56     // View
57     CView *pView = (CView *)GetActiveView();
58 }
59
60 // View中获取其它三项指针
61 CSDIView::CSDIView()//构造函数
62 {
63     // App
64     CWinAppEx *pApp = (CWinAppEx *)AfxGetApp();
65     // Doc
66     /* 无法在View的构造函数里得到Doc指针
67        GetDocument();实际上是返回m_pDocument
68        m_pDocument在OnCreate();里创建        */
69     //CDocument *pDoc = GetDocument();
70     // MainFrame
71     // 构造函数里无法得到MainFrame指针
72     // CFrameWndEx *pMain = (CFrameWndEx *)pApp->m_pMainWnd;
73     // View
74 }
75 void CSDIView::OnView()
76 {
77     // App
78     // 同构造函数
79     // Doc
80     CDocument *pDoc = GetDocument();
81     // MainFrame
82     CFrameWndEx *pMain = (CFrameWndEx *)AfxGetMainWnd();
83     // View
84 }
85
86 // Dlg中获取指针
87 CDlg::CDlg(CWnd* pParent /*=NULL*/)//构造函数
88     : CDialog(CDlg::IDD, pParent)
89 {
90     // App
91     CWinAppEx *pApp = (CWinAppEx *)AfxGetApp();
92     // Doc
93     CDocument *pDoc = ((CFrameWndEx *)AfxGetMainWnd())->GetActiveDocument();
94     // MainFrame
95     CFrameWndEx *pMain = (CFrameWndEx *)AfxGetMainWnd();
96     // View
97     CView *pView = ((CFrameWndEx *)AfxGetMainWnd())->GetActiveView();
98 }
时间: 2024-10-25 22:08:29

MFC中App,Doc,MainFrame,View各指针的互相获取的相关文章

MFC中的GDI绘图<转>

一.关于GDI的基本概念 什么是GDI? Windows绘图的实质就是利用Windows提供的图形设备接口GDI(Graphics Device Interface)将图形绘制在显示器上. 在Windows操作系统中,动态链接库C:\WINDOWS\system32\gdi32.dll(GDI Client DLL)中定义了GDI函数,实现与设备无关的包括屏幕上输出像素.在打印机上输出硬拷贝以及绘制Windows用户界面功能.在Visual C++6.0中的头文件C:\Program Files

MFC中的GDI绘图(2)

二.MFC中GDI绘图 GDI绘图包括以下步骤:获取设备环境,设置坐标映射,创建绘图工具,调用DC绘图函数绘图. 1.获取设备环境 (1)在SDK编程中,获取设备环境的方法有两种: <1>通过API函数BeginPaint.应用程序响应WM_PAINT消息进行图形刷新时主要通过BeginPaint函数获取设备环境,在消息处理函数返回前调用API函数EndPaint释放设备环境. 函数原型为:WINUSERAPI HDC WINAPI BeginPaint( HWND hWnd,LPPAINTS

MFC中CTime获取日期时间的方法

MFC中CTime类的功能非常强大,可以获取年.月.日.小时.分钟.秒.星期等等,最最重要的是可根据需要去格式化.下面是具体的使用方式: ① 定义一个CTime类对象 CTime time; ② 得到当前时间 time = CTime::GetCurrentTime(); ③ GetYear( ),GetMonth( ), GetDay( ), GetHour( ), GetMinute( ), GetSecond( ), GetDayOfWeek( ) 返回整型(int)对应项目 ④ 将当前时

(转)MFC中Doc,View,MainFrmae,App各指针的互相获取

App是应用域,所有的域中的东西都可以通过全局函数访问到它. MainFrame是主框架,也基本可以用全局函数访问到. MainFrame下是若干个ChildFrame,ChildFrame中若干个View和Document(可能不成对),ChildFrame管理着View,View和Document进行互操作. 因此整体框架就出来了,一般除了直接应用的关系都可以通过MainFrame-->Active ChildFrame-->Active View-->Document这条线进行访问

MFC通过对话框窗口句柄获得对话框对象指针

C***Dialog* pWnd= (C***Dialog*)FromHandle(hWnd); //由句柄得到对话框的对象指针    pWnd->xxx( );                                             //调用C***Dialog中的函数xxx(); 通过窗口类函数:CWnd *GetWindow获得窗口指针,pWnd->m_hWnd(The handle of the Windows window attached to this CWnd)

MFC中浏览文件和浏览目录的实现[转]

1. 浏览文件 1 void CDlgCompare::OnBnClickedBtnSel() 2 { 3 // TODO: Add your control notification handler code here 4 UpdateData(TRUE); 5 CFileDialog fileDlg(TRUE); 6 fileDlg.m_ofn.lpstrTitle="文件打开对话框"; 7 fileDlg.m_ofn.lpstrFilter="All Files(*.*

MFC中快速应用OpenCV(转)

转载链接:http://wiki.opencv.org.cn/index.php/MFC%E4%B8%AD%E5%BF%AB%E9%80%9F%E5%BA%94%E7%94%A8OpenCV 简介和缘起 本教程原始讨论主题,请见 [原创]MFC中快速应用OpenCV教程,制作此教程的目的,就是为了方便广大windows下面使用MFC的用户可以轻松的在MFC窗口View类中,实现OpenCV格式图片的显示. 介绍基本的openCV和MFC的操作 在MFC中如何应用菜单,和Canny算子的实例 创建

MFC中按钮控件的用法笔记(转)

VC学习笔记1:按钮的使能与禁止 用ClassWizard的Member Variables为按钮定义变量,如:m_Button1:则m_Button1.EnableWindow(true); 使按钮处于允许状态m_Button1.EnableWindow(false); 使按钮被禁止,并变灰显示 VC学习笔记2:控件的隐藏与显示 用CWnd类的函数BOOL ShowWindow(int nCmdShow)可以隐藏或显示一个控件. 例1:CWnd *pWnd;pWnd = GetDlgItem(

深入MFC中WM_COMMAND命令消息的传递

MFC将windows消息系统进行了高度的抽象和封装,其根本原理是运用C++的高级特性并结合一定的设计模式(如工厂模式,模板方法等)来实现的.一般的windows消息(WM_XXX),则一定是由派生类流向基类,没有旁流的可能.如果是命令消息(WM_COMMAND),那就有比较奇特的路线了.下面就针对多文档/单文档(Document-View).对话框两种应用程序比较讨论WM_COMMAND消息的传递处理过程.讨论前首先得明确命令消息的来源,命令消息一般是用户选择某个菜单项,或一个加速键被翻译,或