blog 在 MDI 应用程序中,MDI 主框架窗口(CMDIFrameWnd) 不具有与其相关联的视图。相反,每个单独的子窗口(CMDIChildWnd)具有与之关联的一个或多个视图。因此,对 MDI 主框架窗口的 GetActiveView() 函数的调用,则返回 NULL

http://blog.csdn.net/changbaolong/article/details/8098353

症状

GetActiveView() 函数将返回活动视图(如果有的话)附加到框架窗口(CFrameWnd)。此函数返回 NULL 时为MDI 主框架窗口 (CMDIFrameWnd) 调用。

原因

在 MDI 应用程序中,MDI 主框架窗口(CMDIFrameWnd) 不具有与其相关联的视图。相反,每个单独的子窗口(CMDIChildWnd)具有与之关联的一个或多个视图。因此,对 MDI 主框架窗口的 GetActiveView() 函数的调用,则返回 NULL。本文的"更多信息"部分提供了在 MDI 应用程序中不同的窗口的布局。

解决方法

若要解决此问题,请查找活动的 MDI 子窗口(如果有的话),然后调用 GetActiveView()函数的子窗口。可以通过调用 MDIGetActive() 或 GetActiveFrame() 函数,找到活动的 MDI 子窗口,此代码中所示:

CMDIFrameWnd *pFrame = (CMDIFrameWnd*)AfxGetApp()->m_pMainWnd;

// Get the active MDI child window.

CMDIChildWnd *pChild = CMDIChildWnd *)pFrame->GetActiveFrame();

/* or CMDIChildWnd *pChild =

pFrame->MDIGetActive();

*/

// Get the active view attached to theactive MDI child window.

CMyView *pView = (CMyView *)pChild->GetActiveView();

更多信息

MDI 框架窗口的工作区被称为MDICLIENT,也称为工作区中的客户端窗口覆盖。此客户端窗口中又包含零个或更多的子窗口,其中每个可显示的视图,如本图中所示:

---------------------------

|      Frame Window         | ---> CMDIFrameWnd

| (main application window)|

---------------------------

|

--------------------

|   Client Window    | ---> MDICLIENT window class

| (no view attached) |

--------------------

|

-----------------------------------------------------------

|                            |

---------------------      --------------------

|  Child Window 1    |    |  Child Window 2   |  ---> CMDIChildWnd

| (one or more views) |    | (one or more views |

---------------------      --------------------

在此图中所示,MDI 框架窗口没有直接与之相关联的视图。视图实际上与程序关联的 MDI 子窗口。

因此,为 MDI 主框架窗口调用 GetActiveView() 函数将返回 NULL,意味着没有直接与 MDICLIENT 相关视图。通过先查找活动的 MDI 子窗口,在本文的解决方案一节中所述,为的子窗口查找活动视图,可以获取 MDI 应用程序中的活动视图。

转载自:http://support.microsoft.com/kb/129649

GetActiveView 返回 NULL 为 MDI 框架窗口的更多相关文章

  1. MFC中 SDI/MDI框架各部分指针获取方式

    VC MFC SDI/MDI框架各部分指针获取方式   整理总结一下,希望能帮助到别人.   获得CWinApp 获得CMainFrame 获得CChildFrame 获得CDocument 获得CV ...

  2. VC编程小技巧之框架窗口及其他

    1.修改主窗口风格 AppWizard生成的应用程序框架的主窗口具有缺省的窗口风格,比如在窗口标题条中自动添加文档名.窗口是叠加型的.可改变窗口大小等.要修改窗口的缺省风格,需要重载CWnd::Pre ...

  3. 积累的VC编程小技巧之框架窗口及其他

    1.修改主窗口风格 AppWizard生成的应用程序框架的主窗口具有缺省的窗口风格,比如在窗口标题条中自动添加文档名.窗口是叠加型的.可改变窗口大小等.要修改窗口的缺省风格,需要重载CWnd::Pre ...

  4. Java知多少(81)框架窗口基础

    窗口是GUI编程的基础,小应用程序或图形界面的应用程序的可视组件都放在窗口中,在GUI中,窗口是用户屏幕的一部分,起着在屏幕中一个小屏幕的作用.有以下三种窗口: Applet窗口:Applet类管理这 ...

  5. Picasso加载网络图片失败,提示decodestream时返回null

    最近遇到一个问题,项目用的图片加载框架是Picasso,网络加载框架是okhttp,项目在加载轮播图时有时可以正常加载,有时,会加载失败,提示decodestream时返回null. 首先,需要确定是 ...

  6. MFC自绘框架窗口客户区

    利用MFC开发用户界面往往需要需要根据要求进行界面美化,界面的美化包括很多内容,比如说界面各功能模块空间布局,控件位置选择,各功能模块区域的字体.背景颜色选择.添加位图,标题栏.菜单栏.状态栏等的重绘 ...

  7. 十. 图形界面(GUI)设计2.框架窗口

    窗口是GUI编程的基础,小应用程序或图形界面的应用程序的可视组件都放在窗口中,在GUI中,窗口是用户屏幕的一部分,起着在屏幕中一个小屏幕的作用.有以下三种窗口: Applet窗口:Applet类管理这 ...

  8. WTL之手动编写框架窗口

    新版博客已经搭建好了,有问题请访问 htt://www.crazydebug.com 本人是一个实践主义者,不罗嗦上一篇工程搭建好以后,这一篇就开始写代码,写之前再说几句,如果你熟悉MFC分析过MFC ...

  9. json_decode返回NULL

    最近在调用某公司的API时,将对方返回的数据,使用PHP的json_decode函数解析,但是返回NULL,最终排查为对方传送来的json格式有误 打印$_REQUEST,数据结构大致如下: arra ...

随机推荐

  1. 无限大整数相加算法的C语言源代码

    忙里偷闲,终于完成了无限大整数相加算法的C语言代码,无限大整数相加算法的算法分析在这里. 500位的加法运行1000次,不打印结果的情况下耗时0.036秒,打印结果的情况下耗时16.285秒. 下面是 ...

  2. NOPI读取EXCEL

    public void ReadEXCEL(string filePath) { IWorkbook wk = null; string extension = System.IO.Path.GetE ...

  3. 用VIM写作

    Write in VIm 1.Writing in Vim by Dr. Bunsen

  4. C++ GUI Programming with Qt4 笔记 -- chap2 QDialog

    以 finddialog 为例,介绍 QDialog.并对 Qt 的基本概念和技巧做了更进一步(chap1)的介绍. 1.MOC 扩展与signals–slots 机制 严格来说,Qt 开发,写的并不 ...

  5. java 泛型 窜讲

    一.为什么使用泛型      复用性:泛型的本质就是参数化类型,因而使用编写的泛型代码可以被许多不同类型的对象所复用.      安全性:在对类型Object引用的参数操作时,往往需要进行显式的强制类 ...

  6. cocos2dx 初探 - VS2012 HELLOWORLD

    最近决定用cocos2dx 来做些试验性的东西,先装了个vs2012 再从网上下了cocos2dx-2.1.4就开工了. 仅是Windows 桌面调试还是很简单的. 上面三个项目源: Hellocpp ...

  7. jxl和poi处理excel之比较

    功能需求是根据客户提供的excel模板,程序动态填充其中的一些数据.该模板包含大量的宏,刚拿到的时候头都要晕了,本人虽天天和电脑打交道,但是excel咱不是高手啊,什么宏,之前光听过,听着都觉得是高级 ...

  8. 关于ligerUi的ligertree的初始化默认选中指定项目的方法

    LigerUi中ligerTree官方示例代码片段: var parm = function (data) { return data.text.indexOf('节点1.3') == 0; }; t ...

  9. Class.forName、Class.class(属性)、getClass()的区别

    1.出现的时期不同:Class.forName()在运行时加载:Class.class和getClass()是在编译器加载2.Class.class只是在编译时用来存放类的相关信息,并没有实例化对象: ...

  10. oracle11g 表或视图连接时有可能发生的问题

    ---------背景--------- oracle11g 有2个视图,都有一个id字段,且id字段的值相同 例如:id都有 A01 ,A02 ,A03 --------问题--------- 把2 ...