没有合适的资源?快使用搜索试试~ 我知道了~
MFC六大关键技术之初始化过程
需积分: 16 2 下载量 32 浏览量
2010-07-09
14:40:46
上传
评论
收藏 139KB DOC 举报
温馨提示
试读
57页
MFC六大关键技术之初始化过程 MFC的六大关键技术包括: •MFC程序的初始化过程 •运行时类型识别(RTTI) •动态创建 •永久保存 •消息映射 •消息传递
资源推荐
资源详情
资源评论
MFC 六大关键技术 收藏
MFC 六大关键技术之初始化过程
我并不认为 MFC 减轻了程序员们的负担,MFC 出现的目的虽然似
乎是为了让程序员不用懂得太多就可以进行视窗编程,但本人在
MFC 里徘徊了很久很久(因为那时没有书本详细介绍 MFC 的原
理),毫无收获。可能朋友们会说,怎么一定要了解 MFC 的具体呢,
“黑箱”作业不行吗?这不是微软的初衷吗?
不行!!!如果这样,我宁愿永远不选择 MFC!在学电脑之前,
本人学习的东西大都与艺术不无关系,小学时参加过全国书画比赛
获银奖。儿时的爱好就是在一张纸上随心所欲地画画!MFC“黑箱”
就象一幅硕大的抽象画(抽象到你不能理解),它用铅笔勾画好线
条,然后请你填颜色。
我们怎么能忍受“黑箱”作业?我们选择 C++,就是因为它够自由,
够艺术,我们可以在此放飞幻想。所以,我们要攻克 MFC。
伟大孙老师在剖析 MFC 的时候虽然尽心尽力,但可能由于篇幅
所限,说得并不大清楚(我相信许多学员都有这方面的感受)。在
此,我突发奇想,想与大家一同分享一下著名的 MFC 六大关键技术。
从什么地方开始讲起好呢?我觉得回到最初摸索 MFC 的时候,
从基本谈起最好。
因为我知道,一个走过来程序员,总是忘记了当初自己是怎么
走过来的,忘记了一个学员最想知道的是什么。一个小小的问题
(一两句话就可以解释的),足学以令手无寸铁的学员头大半个月,
所以,我努力回忆当初是怎么让自己豁然开朗的。
转入正题,MFC 的六大关键技术包括:
·MFC 程序的初始化过程
·运行时类型识别(RTTI)
·动态创建
·永久保存
·消息映射
·消息传递
MFC 程序的初始化过程
1、设计一个简单完整 MFC 程序,产生一个窗口。当然这不能
让 AppWizard 自动为我们生成。我们可以在 Win32 Application 工程
下面那样写:
#include <afxwin.h>
class MyApp : public CWinApp
{
public:
BOOL InitInstance() //② 程序入点
{
CFrameWnd *Frame=new CFrameWnd();//构造框架
m_pMainWnd=Frame; //将 m_pMainWnd 设定为 Frame;
Frame->Create(NULL,"最简单的窗口");//建立框架
Frame->ShowWindow(SW_SHOW); //显示框架
return true; //返回
}
};
MyApp theApp; //① 建立应用程序。
设定链接 MFC 库,运行,即可看见一个窗口。
从上面,大家可以看到建立一个 MFC 窗口很容易,只用两步:
一是从 CWinApp 派生一个应用程序类(这里是 MyApp), ,然后建
立应用程序对象(theApp),就可以产生一个自己需要的窗口 (即
需要什么样就在 InitInstance()里创建就行了)。
整个程序,就改写一个 InitInstance()函数,创建那么一个对象
(theApp), 就是一个完整的窗口程序。这就是“黑箱”作业的 魅
力!!!!
在我们正想为微软鼓掌的时候,我们突然觉得心里空荡荡的,
我们想知道微软帮我们做了什么事情,而我们想编自己的程序时又
需要做什么事情,那怕在上面几行的程序里面,我们还有不清楚的
地方,比如,干嘛有一个 m_pMainWnd 指针变量,它从哪里来,又
要到哪里去呢?想一想在 DOS 下编程是多么美妙的一件事呵,我们
需要什么变量,就声明什么变量,需要什么样的函数,就编写什么
样的函数,或者引用函数库……但是现在我们怎么办!!!
我们可以逆向思维一下,MFC 要达到这种效果,它是怎么做的
呢?首先我们要弄明白,VC 不是一种语言,它就象我们学 c 语言的
时候的一个类似记事本的编辑器(请原谅我的不贴切的比喻),所
以,在 VC 里面我们用的是 C++语言编程,C++才是根本(初学者总
是以为 VC 是一门什么新的什么语言,一门比 C++先进很多的复杂
语言,汗)。说了那么多,我想用一句简单的话概括“MFC‘黑箱’就
是帮助我们插入了‘C++代码’的东西”。
既然 MFC 黑箱帮我们插入了代码,那么大家想想它会帮我们插
入什么样的代码呢?他会帮我们插入求解一元二次方程的代码吗?
当然不会,所以它插入的实际上是每次编写窗口程序必须的,通用
的代码。
再往下想,什么才是通用的呢?我们每次视窗编程都要写
WinMain()函数,都要有注册窗口,产生窗口,消息循环,回调函数
……即然每次都要的东西,就让它们从我们眼前消失,让 MFC 帮忙
写入!
要知道 MFC 初始化过程,大家当然可以跟踪执行程序。孙老师
的第三课跟踪了很长一段时间,我相信大家都有点晕头转向。本人
觉得那怕你理解了 MFC 代码,也很容易让人找不着北,我们完全不
懂的时候,在成千上万行程序的迷宫中如何能找到出口?
我们要换一种方法,不如就来重新编写个 MFC 库吧,哗!大家
不要笑,小心你的大牙,我不是疯子(虽然疯子也说自己不疯)。
我们要写的就是最简单的 MFC 类库,就是把 MFC 宏观上的,理论
上的东西写出来。我们要用最简化的代码,简化到刚好能运行。
既然,我们这一节写的是 MFC 程序的初始化过程,上面我们还
有了一个可执行的 MFC 程序。程序中只是用了两个 MFC 类,一个
是 CWinApp,另一个是 CFrameWnd。当然,还有很多同样重要 MFC
类如视图类,文档类等等。但在上面的程序可以不用到,所以暂时
省去了它(总之是为了简单)。
好,现在开始写 MFC 类库吧……唉,面前又有一个大难题,就
是让大家背一下 MFC 层次结构图。天,那张鱼网怎么记得住,但既
然我们要理解他,总得知道它是从那里派生出来的吧。
考虑到大家都很辛苦,那我们看一下上面两个类的父子关系(箭
头代表派生):
CObject->CCmdTarget->CWinThread->CWinApp->自己的重写了
InitInstance()的应用程序类。
CObject(同上)->CCmdTarget(同上)->CWnd->CFrameWnd
剩余56页未读,继续阅读
资源评论
luffylli
- 粉丝: 0
- 资源: 15
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功