如何获取当前 CDocument 或 CView 从任意位置
2010-01-25 14:08
393 查看
http://support.microsoft.com/kb/108587/zh-cn
在一个 Microsoft 基础类 (MFC) 在基于 Windows 的应用程序,它通常是能够获取对当前活动文档的指针或查看从任何位置在程序中非常有用。 渚嬪能够从一个对话框中访问当前文档是有时非常有用。 本文讨论了用于执行此操作,使用 MFC 对象和基本 MFC 体系结构之间关系最简单的方法。
可能需要一个指向当前活动视图或文档的情况之一是模式对话框或无模式对话框中。 通常,一个对话框,应创建视图类通过因为该视图是什么处理应用程序的用户界面。
视图类创建对话框中,因为它可以将指针传递给自身,或对话框中将活动文档 [获得与 GetActiveDocument() 函数]。 这可以通过对话框的构造函数或某些其他成员函数来完成。 对于有模式对话框视图可能还数据从对话框到文档时放入 DoModal() 返回。
这些方法都要依赖于泛型函数以返回到当前活动视图或文档的指针通常更可取。
若要允许您获取指向当前处于活动状态的文档从任意位置的指针将在程序中静态成员函数添加到您 CDocument 派生的类,如下所示:
编辑文档的头文件,如下所示,添加静态成员函数 GetDoc():
[/code]
标单文档界面 (SDI) 应用程序添加以下代码 SDI 文档的实现文件用于 CMyDoc::GetDoc():
[/code]
多的文档界面 (MDI) 应用程序对于 CMyDoc::GetDoc() 代码应如下:
[/code]
允许您获取一个指针,指向当前活动视图从任意位置将在程序中静态成员函数添加到您的 CView 派生类,如下所示:
编辑视图的头文件,如下所示,添加静态成员函数 GetView():
[/code]
For SDI 应用程序添加以下代码 SDI 视图的实现文件用于 CMyView::GetView():
[/code]
MDI 应用程序对于 CMyView::GetView() 代码应如下:
[/code]
立即,从任意位置已包含,文档或视图头文件在程序中,可以调用:
[/code]
-或者-
[/code]
当前处于活动状态的文档或视图,分别获取一个指针。 如果没有活动文档或视图,这些函数将返回 NULL。
一个指针,指向应用程序的 CDocument 或 CView 派生类的注意返回,而不只是一个泛型 CDocument 或 CView 指针。 这使您可以访问特定于您的新类的成员。 这些函数的 MDI 版本和 GetView() 函数的 SDI 版本将使用运行时类型检查以验证文档或视图是正确的类。
在一个 Microsoft 基础类 (MFC) 在基于 Windows 的应用程序,它通常是能够获取对当前活动文档的指针或查看从任何位置在程序中非常有用。 渚嬪能够从一个对话框中访问当前文档是有时非常有用。 本文讨论了用于执行此操作,使用 MFC 对象和基本 MFC 体系结构之间关系最简单的方法。
可能需要一个指向当前活动视图或文档的情况之一是模式对话框或无模式对话框中。 通常,一个对话框,应创建视图类通过因为该视图是什么处理应用程序的用户界面。
视图类创建对话框中,因为它可以将指针传递给自身,或对话框中将活动文档 [获得与 GetActiveDocument() 函数]。 这可以通过对话框的构造函数或某些其他成员函数来完成。 对于有模式对话框视图可能还数据从对话框到文档时放入 DoModal() 返回。
这些方法都要依赖于泛型函数以返回到当前活动视图或文档的指针通常更可取。
若要允许您获取指向当前处于活动状态的文档从任意位置的指针将在程序中静态成员函数添加到您 CDocument 派生的类,如下所示:
编辑文档的头文件,如下所示,添加静态成员函数 GetDoc():
[code] // Document header file class CMyDoc : public CDocument { ... public: static CMyDoc * GetDoc(); ... };
[/code]
标单文档界面 (SDI) 应用程序添加以下代码 SDI 文档的实现文件用于 CMyDoc::GetDoc():
[code] // SDI document implementation file CMyDoc * CMyDoc::GetDoc() { CFrameWnd * pFrame = (CFrameWnd *)(AfxGetApp()->m_pMainWnd); return (CMyDoc *) pFrame->GetActiveDocument(); }
[/code]
多的文档界面 (MDI) 应用程序对于 CMyDoc::GetDoc() 代码应如下:
[code] CMyDoc * CMyDoc::GetDoc() { CMDIChildWnd * pChild = ((CMDIFrameWnd*)(AfxGetApp()->m_pMainWnd))->MDIGetActive(); if ( !pChild ) return NULL; CDocument * pDoc = pChild->GetActiveDocument(); if ( !pDoc ) return NULL; // Fail if doc is of wrong kind if ( ! pDoc->IsKindOf( RUNTIME_CLASS(CMyDoc) ) ) return NULL; return (CMyDoc *) pDoc; }
[/code]
允许您获取一个指针,指向当前活动视图从任意位置将在程序中静态成员函数添加到您的 CView 派生类,如下所示:
编辑视图的头文件,如下所示,添加静态成员函数 GetView():
[code] // View header file class CMyView { ... public: static CMyView * GetView(); ... };
[/code]
For SDI 应用程序添加以下代码 SDI 视图的实现文件用于 CMyView::GetView():
[code] // View implementation file CMyView * CMyView::GetView() { CFrameWnd * pFrame = (CFrameWnd *)(AfxGetApp()->m_pMainWnd); CView * pView = pFrame->GetActiveView(); if ( !pView ) return NULL; // Fail if view is of wrong kind // (this could occur with splitter windows, or additional // views on a single document if ( ! pView->IsKindOf( RUNTIME_CLASS(CMyView) ) ) return NULL; return (CMyView *) pView; }
[/code]
MDI 应用程序对于 CMyView::GetView() 代码应如下:
[code] // MDI view implementation file CMyView * CMyView::GetView() { CMDIChildWnd * pChild = ((CMDIFrameWnd*)(AfxGetApp()->m_pMainWnd))->MDIGetActive(); if ( !pChild ) return NULL; CView * pView = pChild->GetActiveView(); if ( !pView ) return NULL; // Fail if view is of wrong kind if ( ! pView->IsKindOf( RUNTIME_CLASS(CMyView) ) ) return NULL; return (CMyView *) pView; }
[/code]
立即,从任意位置已包含,文档或视图头文件在程序中,可以调用:
[code] CMyDoc::GetDoc();
[/code]
-或者-
[code] CMyView::GetView();
[/code]
当前处于活动状态的文档或视图,分别获取一个指针。 如果没有活动文档或视图,这些函数将返回 NULL。
一个指针,指向应用程序的 CDocument 或 CView 派生类的注意返回,而不只是一个泛型 CDocument 或 CView 指针。 这使您可以访问特定于您的新类的成员。 这些函数的 MDI 版本和 GetView() 函数的 SDI 版本将使用运行时类型检查以验证文档或视图是正确的类。
相关文章推荐
- 如何获取用户手机当前是否启动了android机的模拟位置功能
- 获取Textarea 元素当前的光标位置及document.selection.createRange()资料
- Android-如何在任意位置获取context,来实现Toast的快捷使用?
- 如何获取当前鼠标的位置
- 如何在ViewPager外部获取“当前显示的页面的位置position”
- MFC构建中,任意程序位置,获取当前活动视图、文档类
- 在html中 如何获取table的当前所在行的位置
- jquery 如何获取鼠标当前位置?
- Python 中如何获取当前位置所在的文件名,函数名,以及行号
- 移动端报表如何获取当前地理位置
- 获取 Textarea 元素当前的光标位置及document.selection.createRange()资料
- 如何在ViewPager外部获取“当前显示的页面的位置position”
- 通过spring,在项目的任意位置获取当前Request
- 如何在网页上获取用户的当前位置[仅限移动端网页]
- 如何在 Windows Phone 8 中获取手机的当前位置
- android中长按listview弹出菜单后如何在菜单选择方法中获取当前listview的位置
- 如何获取当前执行Assembly的位置
- 获取Textarea 元素当前的光标位置及document.selection.createRange()资料
- Windows Store apps开发[15]如何获取设备当前位置
- 如何使用Core Location获取当前的位置和GPS的坐标呢?