GetActiveView 返回 NULL 为 MDI 框架窗口
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 框架窗口的更多相关文章
- MFC中 SDI/MDI框架各部分指针获取方式
VC MFC SDI/MDI框架各部分指针获取方式 整理总结一下,希望能帮助到别人. 获得CWinApp 获得CMainFrame 获得CChildFrame 获得CDocument 获得CV ...
- VC编程小技巧之框架窗口及其他
1.修改主窗口风格 AppWizard生成的应用程序框架的主窗口具有缺省的窗口风格,比如在窗口标题条中自动添加文档名.窗口是叠加型的.可改变窗口大小等.要修改窗口的缺省风格,需要重载CWnd::Pre ...
- 积累的VC编程小技巧之框架窗口及其他
1.修改主窗口风格 AppWizard生成的应用程序框架的主窗口具有缺省的窗口风格,比如在窗口标题条中自动添加文档名.窗口是叠加型的.可改变窗口大小等.要修改窗口的缺省风格,需要重载CWnd::Pre ...
- Java知多少(81)框架窗口基础
窗口是GUI编程的基础,小应用程序或图形界面的应用程序的可视组件都放在窗口中,在GUI中,窗口是用户屏幕的一部分,起着在屏幕中一个小屏幕的作用.有以下三种窗口: Applet窗口:Applet类管理这 ...
- Picasso加载网络图片失败,提示decodestream时返回null
最近遇到一个问题,项目用的图片加载框架是Picasso,网络加载框架是okhttp,项目在加载轮播图时有时可以正常加载,有时,会加载失败,提示decodestream时返回null. 首先,需要确定是 ...
- MFC自绘框架窗口客户区
利用MFC开发用户界面往往需要需要根据要求进行界面美化,界面的美化包括很多内容,比如说界面各功能模块空间布局,控件位置选择,各功能模块区域的字体.背景颜色选择.添加位图,标题栏.菜单栏.状态栏等的重绘 ...
- 十. 图形界面(GUI)设计2.框架窗口
窗口是GUI编程的基础,小应用程序或图形界面的应用程序的可视组件都放在窗口中,在GUI中,窗口是用户屏幕的一部分,起着在屏幕中一个小屏幕的作用.有以下三种窗口: Applet窗口:Applet类管理这 ...
- WTL之手动编写框架窗口
新版博客已经搭建好了,有问题请访问 htt://www.crazydebug.com 本人是一个实践主义者,不罗嗦上一篇工程搭建好以后,这一篇就开始写代码,写之前再说几句,如果你熟悉MFC分析过MFC ...
- json_decode返回NULL
最近在调用某公司的API时,将对方返回的数据,使用PHP的json_decode函数解析,但是返回NULL,最终排查为对方传送来的json格式有误 打印$_REQUEST,数据结构大致如下: arra ...
随机推荐
- 禁用浏览器缓存Ajax请求
$.ajax({ url: 'url.php', cache: false, success: function(data){ //..... } }); 仅Get有缓存, Post不会缓存
- 用dubbo+zookeeper+spring搭建一个简单的http接口程序
dubbo是一个分布式服务框架,是阿里巴巴开发的一个解决RPC远程调用优化的核心框架,包含负载均衡算法,能提高分布式系统的性能. zookeeper是hadoop的一个子项目,主要用来解决分布式系统的 ...
- StrHelper
public class StrHelper { private static string passWord; //加密字符串 /// <summary> /// 判断输入是否数字 // ...
- dd命令测试linux磁盘读写速度
1.先熟悉两个特殊的设备: (1)/dev/null:回收站.无底洞. (2)/dev/zero:产生字符. 2.测试磁盘写能力 time dd if=/dev/zero of=/t ...
- CentOS 7 install LNMP
CentOS 7 install LNMP 关于 Nginx (发音 “engine x”)这是一款免费.开源.高效的 HTTP 服务器,Nginx是以稳定著称,丰富的功能,结构简单,低资源消耗.本教 ...
- Linux C 程序 空语句-gcc编译命令(SIX)
C语言语句1.空语句:当一个if或者while判断部分能完成工作,空语句可以用来表示if或者while内的空循环体 if(a == b ); 2.gcc编译器 //程序的编译过程: // 预处理:pr ...
- 开发APP不搞清楚这20个问题,必然沦为一场灾难
移动经济的高速增长极大刺激了企业和个人的APP开发热情,从卖野山鸡的到卖无人机的,从老大妈到小正太都跃跃欲试,更不要说那些传统企业的信息主管们了. 面对今天如过江之鲫的APP市场,很少有人意识到,移动 ...
- javascript中的变量作用域以及变量提升详细介绍
在javascript中, 理解变量的作用域以及变量提升是非常有必要的.这个看起来是否很简单,但其实并不是你想的那样,还要一些重要的细节你需要理解变量作用域 “一个变量的作用域表示这个变量存在的上下文 ...
- mysql Error Handling and Raising in Stored Procedures
MySQL的存储过程错误捕获方式和Oracle的有很大的不同. MySQL中可以使用DECLARE关键字来定义处理程序.其基本语法如下: DECLARE handler_type HANDLER FO ...
- WinForm小小应用
制作日历计划任务 private void BeginTask() { Thread th = new Thread(//建立线程 (() =>//使用Lambda表达式 { while (tr ...