欢迎来到天天文库
浏览记录
ID:44181733
大小:90.00 KB
页数:7页
时间:2019-10-19
《追根究底,剖析MFC六大关键技术(第一部分)-Read》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、追根究底,剖析MFC六大关键技术(第一部分)MFC的六大关键技术包括:MEC程序的初始化过程。运行时类型识别(RTTI)o动态创建。永久保存。消息映射。消息传递。MFC程序的初始化过程1、设计一个简单完整MFC程序,产牛一个窗口。当然这不能让AppWizard口动为我们牛成。我们可以在Win32Application工程下面那样写:#includeclassMyApp:publicCWinApp{public:BOOLInitlnstance()//②程序入点{CFrameWnd*Erame=newCFrameWndO;//构造框架m_pMainWnd=Frame
2、;//将m_pMainWnd设定为Frame;Frame->Create(NULL,"最简单的窗口");//建立框架Frame_>ShowWindow(SWSIIOW);//显示框架returntrue;//返回}};MyApptheApp;//①建立应用程序。设定链接MFC库,运行,即可看见一个窗口。从上面,大家可以看到建立一个MFC窗口很容易,只用两步:—是从CWinApp派牛一个应用程序类(这里是MyApp),,然后建立应用程序对象(theApp),就可以产生一个自C需要的窗口(即需要什么样就在Initlnstance()里创建就行了)。整个程序,就改写一个Tnitlnstan
3、ceO函数,创建那么一个对象(theApp),就是-一个完整的窗口程序。这就是“黑箱”作业的魅力!!!!在我们正想为微软鼓掌的时候,我们突然觉得心里空荡荡的,我们想知道微软帮我们做了什么事情,而我们想编自己的程序时又需要做什么事情,那怕在上血几行的程序里血,我们还有不淸楚的地方,比如,干嘛有一个m_pMainWnd指针变量,它从哪里来,又要到哪里去呢?想一想在DOS下编程是多么美妙的一件事呵,我们需要什么变量,就声明什么变量,需要什么样的函数,就编写什么样的函数,或者引用函数库……但是现在我们怎么办!!!我们可以逆向思维一下,MFC要达到这种效果,它是怎么做的呢?首先我们要弄明白,V
4、C不是一种语言,它就象我们学c语言的时候的一个类似记爭本的编输器(请原谅我的不贴切的比喻),所以,在VC里而我们用的是C++语言编程,C++才是根本(初学者总是以为VC是一门什么新的什么语言,一门比C++先进很多的复杂语言,汗)。说了那么多,我想用一句简单的话概括“MFC,黑箱,就是帮助我们插入了'C++代码'的东西”。既然MFC黑箱帮我们插入了代码,那么大家想想它会帮我们插入什么样的代码呢?他会帮我们插入求解i元二次方程的代码吗?当然不会,所以它插入的实际上是每次编写窗口程序必须的,通川的代码。再往下想,什么才是通用的呢?我们每次视窗编程都要写WinMainO函数,都要有注册窗口,
5、产牛窗口,消息循环,回调函数……即然每次都要的东西,就让它们从我们眼前消失,让MFC帮忙写入!要知道MFC初始化过程,大家当然可以跟踪执行程序°孙老师的第三课跟踪了很长一•段吋
6、'可,我相信大家都有点晕头转向。木人觉得那怕你理解了MFC代码,也很容易让人找不着北,我们完全不懂的时候,在成千上万行程序的迷宫中如何能找到出口?我们要换一种方法,不如就来重新编写个MFC库吧,哗!人家不要笑,小心你的人牙,我不是疯子(虽然疯子也说口己不疯)。我们要写的就是最简单的MFC类库,就是把MFC宏观上的,理论上的东西写出来。我们要用最简化的代码,简化到刚好能运行。既然,我们这一节写的是MFC程序的初
7、始化过程,上面我们还有了一个可执行的MFC程序。程序川只是丿U了两个MFC类,一个是CWinApp,另一个是CFrameWndo当然,还有很多同样重要MFC类如视图类,文档类等等。但在上面的稈序可以不用到,所以暂时省去了它(总Z是为了简单)。好,现在开始写MFC类库吧……唉,面前乂有一个人难题,就是让人家背一下MFC层次结构图。沢,那张鱼网怎么记得住,但既然我们要理解他,总得知道它是从那里派生出来的吧。考虑到大家都很辛苦,那我们看一下上血两个类的父子关系(箭头代表派牛):CObject->CCmdTarget->CWinThread->CWinApp->口己的重写了Initlnsta
8、nce()的应用程序类。CObject(同上)->CCmdTarget(同上)->CWnd->CFrameWnd看到层次关系图之后,终于可以开始写MFC类库了。按照上而层次结构,我们可以写以下六个类(为了直观,省去了构造函数和析构函数)。/////////////////////////////////////////////////////////classCObiect{};//MFC类的基类。classCCmdTarget:publicCObject
此文档下载收益归作者所有