SDI和MDI获得文档和视图对象的方法
来源:互联网 发布:淘宝网耐克运动男鞋 编辑:程序博客网 时间:2024/05/17 09:02
一.因为对于SDI程序,主框架窗口就是文档框窗(如果这个也不知道,就要查看一下MFC下的单文档的构成原理了). 下面所说的是关于单文档的.
例子: 在CMainFrame框架中如何得到视图类的指针.可以 先得到框架指针,然后调用 GetActiveView 函数指向当前活动视. C...View * pView; pView=(C...View*)((CFrameWnd*)AfxGetApp()->m_pMainWnd)->GetActiveView();当然这些也许都知道是这么用的,但真正的m_pMainWnd和AfxGetApp()是什么意思也许有的人不明白. 大家也许都知道如何在App中获得MainFrame指针(框架类): CWinApp 中的 m_pMainWnd变量就是CMainFrame的指针.所以在别的类下也可以先得到m_pMainWnd,就得到了MainFrame的指针. 所以得到视图类的指针,必先得到CFrameWnd的指针m_pMainWnd,然后在调用FrameWnd下的GetActiveView 就指向当前活动视图.
m_pMainWnd的由来: 每一个MFC应用程序都有一个CWinApp派生类的对象。这个对象对应着程序的主线程。而 CWinApp 类中有一个 CWnd * m_pMainWnd 成员变量。这个成员变量记录了应用程序的主窗口。 当你新建一个MFC应用程序的时候,在 InitInstance虚函数里都会出现对 m_pMainWnd 赋值的语句.唯一的例外是单文档界面的MFC应用程序,你无法在 InitInstance 函数里看到这段代码,因为它已经被隐藏在 ProcessShellCommand 这个函数里了。由此你就可以下结论:只要创建自己的窗口类,就要把这个类的对象赋值给 m_pMainWnd .而这个成员只能在C...APP类中才可以使用,所以怎样使用这个CWinApp类里的CWnd 类型的变量来得到主框架窗口的指针呢? AfxGetApp函数才可以 , 因为AfxGetApp()得到的是CWinApp类的对象,且AfxGetApp返回值为CWinApp对象指针,就是MFC生成的C**App.cpp中定义的那个对象(对象theApp的指针)。 因为你是在自己创建的项目中得到CWndApp成员函数或者成员变量,所以你必须强制转换为你自己的项目中的类,才能找到成员函数或者变量. 注: 在单文档中,获得视图指针的最简单的方法还是 ((C**View *)CFrameWnd::GetActiveView())
2.当然在FrameWnd中也可以得到文档类的指针: CMyDocument* pDoc;
pDoc=(CMyDocument*)((CFrameWnd*)AfxGetApp()->m_pMainWnd)->GetActiveDocument();
3. 由上面可以知道:在View中怎样获得MainFrame指针 CMainFrame *pMain=(CMainFrame *)AfxGetApp()->m_pMainWnd;
注: 从视图类中获得主窗口类指针:用函数:CWnd::GetParentFrame()或AfxGetMainWnd()也 可达到目的。GetParentFrame()的工作原理是在父窗口链中搜索,直到找到CFrameWnd或其派生类为止,并返回其指针。
((CMainFrame *)CWnd::GetParentFrame()) 或者 ((CMainFrame *)AfxGetMainWnd())
二: 当然对于MDI程序,由于子窗口才是文档框窗,因此首先要用GetActiveFrame()取得活动子框架窗口,然后通过该子窗口获取活动视图和文档:
CMDIChildWnd* pChild=
(CMDIChildWnd*)((CFrameWnd*)AfxGetApp()->m_pMainWnd)->GetActiveFrame();
取得活动视图: CMyView* pView=(CMyView*)pChild->GetActiveView();
取得活动文档: CMyDocument* pDoc=pChild->GetActiveDocument();
注: 也可以用这种方法来得到多文档中的视图指针
//获得活动子框架窗口 CMDIChildWnd* pChild=(CMDIChildWnd*)GetActiveFrame(); //或: CMDIChildWnd* pChild=MDIGetActive();
//获得活动子窗口的活动视图
CMyView* pView=(CMyView*)pChild->GetActiveView();
- SDI和MDI获得文档和视图对象的方法
- SDI或MDI中获得某个文档模板的视图
- 不带文档和视图的 MDI
- MDI和SDI
- 单文档(SDI)和多文档(MDI)
- 在MFC中的CWinApp得到视图的指针,真难呀(适用于SDI和MDI)
- SDI、MDI和拆分窗口
- SDI、MDI和拆分窗口
- SDI、MDI和拆分窗口
- 常用获得文档类和视图类指针的方法
- 获得 MDI 窗体创建和释放的方法
- 对MDI和SDI非客户区
- SDI和MDI分析、RTTI、序列化
- SDI程序和MDI程序区别
- MDI获得任何一个视图或文档
- 单应用程序获得文档类对象指针和获得视图类对象指针办法
- 在mfc的sdi/mdi程序任意视图view内创建可停靠及浮动的工具栏方法
- 单文档应用程序SDI的视图切换
- MFC框架类、文档类、视图类相互访问的方法
- 米公益是什么?
- 百度分享
- 近来听有人说:现在做网站都不用编写代码的
- Mac下 phonegap/cordova 集成sharesdk
- SDI和MDI获得文档和视图对象的方法
- 米公益完结项目结项反馈——“多彩世界,快乐3D”
- 米公益完结项目结项反馈——环保梦想,你我一同点亮
- 啡同小可——咖啡渣的创想
- 非营利部门趋势对营销及募款的影响
- MFC教程(4)-- 消息映射的实现(1)
- MFC教程(5)-- MFC对象的创建(2)
- 互联网促进全民公益时代的到来
- 解决arch linux下安装fcitx输入法框架遇到的问题