| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2213 人关注过本帖
标题:MFC遇到一个令我困惑的现象,和大家讨论(难度较高)
取消只看楼主 加入收藏
yongyong
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2006-4-26
收藏
 问题点数:0 回复次数:3 
MFC遇到一个令我困惑的现象,和大家讨论(难度较高)

我在theApp的InitInstance()中的return TRUE之前加入这样一句:
((CFrameWnd*)m_pMainWnd)->GetActiveView()->CloseWindow();
也就是初始化结束后把view给closewindow。
运行一下看一看,让这个窗口被别的窗口挡住,再切回这个窗口,我们看到,
窗口的client区域就成了“空心”的,显然,整个client区域没有被重绘。
我觉得很奇怪,于是我写了一个SDK模拟了一下,模仿MFC的做法,
创建一个主窗口(模仿mianframe),一个子窗口(模仿view),子窗口覆盖
在主窗口的client区域,然后把子窗口给closewindow,但并不会出现上述现象。

那么就是说MFC中的mainframe是不重绘自己的客户区的,这一点容易理解,
因为通常客户区被view覆盖,mainframe重绘它是多余的。
MFC是如何做到让mainframe不重绘客户区呢?默认情况下,窗口在产生WM_PAINT
消息的时候一般都是要重绘客户区的呀。
我想知道细节,我看了源代码,但水平有限,没有头绪。
请高手指教!

搜索更多相关主题的帖子: MFC 窗口 难度 现象 困惑 
2006-04-26 12:46
yongyong
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2006-4-26
收藏
得分:0 

((CFrameWnd*)m_pMainWnd)->GetActiveView()->CloseWindow();
这一句要加在CMFCxxxApp::InitInstance()的最后,return TRUE之前。你如果把这句放的靠前肯定会出错,因为那时候view还没有被创建呢,GetActiveView()得到的肯定是空指针,肯定要出错。

2006-04-27 09:30
yongyong
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2006-4-26
收藏
得分:0 
to lisypro:已经把程序发给你了,收一下,多谢关注!
我很奇怪你为什么会出错,就这么简单的一句改动,其他都是向导生成的呀,出得什么错呢?
2006-04-28 12:50
yongyong
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2006-4-26
收藏
得分:0 
非常感谢西部天狼,分析的可谓透彻之极,让我长了知识,非常感谢!
2006-04-30 08:47
快速回复:MFC遇到一个令我困惑的现象,和大家讨论(难度较高)
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.021622 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved