“深入浅出MFC(第2版)(附光盘)”

合集下载

深入浅出MFC学习笔记

深入浅出MFC学习笔记
};
AFX_CLASSINIT::AFX_CLASSINIT(CRuntimeClass *pNewClass) {
pNewClass->m_pNextClass = CRuntimeClass::pFirstClass; CRuntimeClass::pFirstClass = pNewClass; }
在 MFC 中保存了一棵类的家族树,CObject 是根结点,其他的类都是他的后代(有几个特 殊的除外,如: CPoint 等)。由于类的家族树存放的是类的信息——不是对象的信息,因此 只需要保存一个就够了,所以 MFC 将这棵树保存为 static 类型。
MFC 类的家族树和数据结构中的树并不相同,普通的树通过跟结点就可以访问所有的结点 (包括叶子)。但在 MFC 中却不行——它只能逆向地从叶子结点向根结点方向访问(从父 结点访问不到子结点)。
size_t n, size_t size, int (*cmp)(const void *keyval, const void *datum)); 想一想开发 bsearch 函数的人怎么会知道两个元素的是什么,怎么比较大小呢?因此就必须 留给用户要自己定义 cmp 函数了! 回调函数一般都有固定的格式(不知道是否会用变参数的情况),不然可能会发生错误。回
void main() {
A *pa = new B; pa->display(); }
执行的结果却打印是:class B
让人感觉不解的地方就是 pa 明明是类 A 的指针,却是执行了类 B 的函数(不可原谅)!!! 其实有这种感觉的人在不知不觉中就犯了一个形而上的错误:用 C 语言的函数行为来套用 display()的行为。在此我想提醒一点:把 C++当作一个新的语言,C 只是参考,不是金科玉 律,切记!!!

“深入浅出MFC(第2版)(附光盘)”

“深入浅出MFC(第2版)(附光盘)”

“深入浅出MFC(第2版)(附光盘)”“深入浅出MFC(第2版)(附光盘)”的全部评论1.现在有很多人说C/C++已经没落了,在不久的将来终将退化到现在汇编语言(Assembly)的地位,基于C++的MFC自然也不能避免被淘汰的命运。

我不否认C++/MFC面对最新的基于动态语言的Web应用显得是多么的力不从心,也不否认大红大紫的Java、Perl、C#等后辈抢夺了MFC无数的风头,但是无论是出于对曾经在Win32历史上扮演过至关重要的角色的颇具神秘色彩的MFC的仰慕,还是出于希望深入理解编程语言与操作系统的交互关系的目的,抑或是为了能更有效的编写Win32应用程序,研究MFC内部运行机理都是必要的。

其实随着现在嵌入式开发的增长,C/C++的使用比例又有了一定程度的增加,这在今年的TIOBE排行榜上也可以得到印证。

而且有很多企业以前的系统都采用的是MFC,有大量的代码需要维护,所以阅读侯俊杰先生所著的《深入浅出MFC第二版》(英文名Dissecting MFC 2nd)之旅。

一个多月断断续续的研读,在合上此书最后一页的时候,我有了一种豁然开朗的感觉。

以前也看过一本介绍MFC程序设计的书籍,不过多是以例子为主,尽管有能力编写图形界面了,不过却是知其然不知其所以然——对于通过VC向导生成的代码有好多不明所以的地方,所幸MFC的使用者只需要按部就班地修改指定的函数体就行了,其余的交给IDE(Integrated Development Environment 集成开发环境)好了——此所谓第一种层次吧。

不过VC++相比其它的RAD(Rapid Application Development 快速应用程序开发)工具(如VB)却是有着本质的不同。

在VC++中,虽然使用者可以同VB一样通过IDE完成大部分的工作,但是VC++并不掩饰反应程序运行机理的代码;而在VB中程序员能看到的只有自己添加的代码。

很难说那种方式一定最好吧,毕竟各有各的用户群。

mfc使用手册

mfc使用手册

mfc使用手册MFC(Microsoft Foundation Class Library)是微软提供的一个类库,用于简化Windows应用程序的开发过程。

以下是MFC使用手册的简要介绍:1. 简介:MFC是一个基于C++的类库,它提供了许多用于构建Windows应用程序的类和函数。

通过使用MFC,开发人员可以快速地构建具有一致外观和感觉的应用程序,并利用Windows平台提供的各种功能。

2. 安装和配置:在开始使用MFC之前,您需要安装Microsoft Visual Studio并确保安装了MFC开发工作负载。

安装完成后,您需要创建一个新的MFC项目或打开一个现有的MFC项目。

3. 创建MFC应用程序:要创建一个新的MFC应用程序,您需要使用Microsoft Visual Studio的向导。

选择“File”菜单中的“New”选项,然后选择“Project”。

在弹出的对话框中,选择“MFC Application”并按照向导的提示完成应用程序的创建过程。

4. MFC类库:MFC提供了许多用于构建应用程序的类和函数。

以下是一些常用的MFC类:CWinApp:应用程序对象类,用于管理应用程序级别的操作,例如初始化应用程序和退出应用程序。

CWnd:窗口类,用于管理窗口的各种操作,例如创建窗口、处理消息和绘制窗口。

CDocument:文档类,用于管理应用程序中的文档数据。

CView:视图类,用于管理应用程序中的视图,例如显示文档数据和与用户交互。

5. MFC消息处理:MFC使用消息传递机制来处理用户与应用程序的交互。

每个窗口和控件都处理一组预定义的消息,例如鼠标点击、键盘输入和窗口大小改变等。

通过覆盖类中的虚函数,您可以定义应用程序如何响应这些消息。

6. MFC对话框和控件:MFC提供了许多内置的对话框和控件,例如按钮、文本框和列表框等。

您可以使用对话框编辑器来创建对话框,并将控件拖放到对话框中。

深入浅出话vc(2)mfc本质

深入浅出话vc(2)mfc本质

一、引言上一专题中,纯手动地完成了一个Windows应用程序,然而,在实际开发中,我们大多数都是使用已有的类库来开发Windows应用程序。

MFC(Microsoft Foundation Class, 微软基础类库)是微软为了简化程序员的开发工作而将Windows API 封装到C++类中,利用这些类,程序员可以有效地完成Windows平台下应用程序的开发。

本专题将详细剖析它。

二、利用向导创建一个MFC程序用于帮助有效地开发Windows应用程序的类库除了MFC外,还有其他开源类库提供,比如说QT,只是QT不是微软开发的罢了,为了更好地剖析MFC,下面让我们用Visual Studio 中的MFC模板和向导工具来创建一个基于MFC的单文档(SDI)应用程序。

1.启动Visual studio 2010,单击文件(FIle)菜单——>新建项目——>项目,在出现的项目窗口中选择Visual C++ 语言,然后选择MFC应用程序,并输入项目的名称为SDIMFC,具体如下图所示。

2.输入项目名称后点击确定按钮,将出现MFC应用程序向导窗口,点击下一步,应用程序类型选择:单个文档,如下图所示:3. 点击下一步,出现MFC向导的第三个对话框,复合文档支持保持默认选择,然后在出现的对话框中一直点击下一步来完成一个单文档MFC应用程序的创建。

下面,按下Ctrl+F5来运行MFC应用程序,之后将看到我们创建的MFC 应用程序界面,具体如下图所示:在上面的程序中,我们并没有编写任何代码,运行它后就生成了一个带标题栏,系统菜单,具有最大化、最小化框和一个可调边框的应用程序,这一切的工作都是由MFC的向导工具帮我们完成,即该向导工具为我们生成了很多代码,下面就以这个简单的MFC程序来分析下MFC框架。

三、MFC框架详细解析我们看下用MFC向导工具帮我们生成的哪些代码。

你可以在VS中点击类视图选项卡(如果VS界面上没有看到类视图的,可以通过菜单栏视图—>类视图的方式显示出来),就可以看到如下图所示的类。

勘误《深入浅出_MFC》2e

勘误《深入浅出_MFC》2e

过去,我对每本作品(着译皆然),总是把握新刷机会,修正每次滑鼠左键按下,开始一条线条,图8-10a中的程式立刻四方形和一个圆形,并和线条一起加入 CObList以下为发现後之当时公告(永远有效)。

各位亲爱的读友:我是侯俊杰。

最近我开一个课程,使用 <深入浅出 MFC> 2/e做教材(ISBN 957-22-2518-9,松岗书号 2101629),发现本书第3刷缺少一张跨页彩色图,此图应该出现在封面之後的扉页位置。

第1刷和第2刷均有此图,独第3刷漏失。

此图为 MFC 4.21 类别阶层架构图,至为重要。

我个人以及松岗公司对此装订上的疏失深感懊恼与抱歉。

松岗公司为维护读者权益,决定加印此图,免费提供给<深入浅出 MFC> 二版3刷之读者索取。

索取方式有三:1. 亲至松岗各门市索取。

2. 进入松岗网页(),对客服部留言函索。

3. FAX 至松岗客服部(02-23257956)函索此图。

以 2 或 3 方式索取者,请留下您的邮寄地址;松岗将以邮递方式将图寄给您。

您不必出示任何读者证明。

因此疏失而为您带来麻烦,我与松岗公司谨至最大的歉意。

虽然疏失的发现时机有点迟,我们愿尽最大的努力弭补。

同时也请您将此讯息告诉您的朋友。

我与松岗公司均力图在每一次可能的机会中,修正内容误失,力求让此书更美好。

我要藉此机会感谢每一位写信给我,向我指正或给我意见的读友。

-- 侯俊杰 1998.05.16★ <深入浅出 MFC> 二版4刷 ★ 出版日期:1998/??本刷内容与3刷完全相同。

★ <深入浅出 MFC> 二版五刷 ★ 出版日期:1998/09●新增读者来函 i~xvi(16 页)二版五刷感言 4 页●模糊不清 重制(括号内为 chap1 之前的页次):(11,17,18,19,26,28,33,)1,35,53,68,81,83,84,101,119,121,137,147,149,269,293,296,641,771,779,784,795,834,839●内容误失:页次:p9 方块内 L5原文: eneric.res : generic.rc generic.h更正:generic.res : generic.rc generic.h页次:p16 图1-3 左下 L-6原文:CW_USEDEFAULT, // hieght更正:CW_USEDEFAULT, // height页次:p27 中段程式码 L2 片段原文:if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)更正:if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE) {页次:p58原文:#0029更正:#0029 {页次:p65 中段程式码片段原文:void setComm(float comm);更正:void setCommission(float comm);页次:p74 L8原文:踪合更正:综合页次:p75 第四段 L3原文:CYaohoo更正:CYahoo页次:p94 L-1原文:vitual更正:virtual页次:p132 Frame3 范例程式 之前 L-3原文:Cobject更正:C O bject页次:p262 L2原文:预设市关闭状态更正:预设是关闭状态页次:p408 程式码片段 L5原文:filename = dlg.GetPathNMe();更正:filename = opendlg.GetPathNMe();页次:p408 程式码片段下第一行原文:opdndlg 构建式的第一个叁数被指定为...更正:opendlg 构建式的第一个叁数被指定为...页次:p493 L-4 尾原文:Document/View/Frmae更正:Document/View/Frame页次:p535 L-6原文:包容 DYNCREATION 巨集,并且在...更正:包容 DYNCREATE 巨集,并且在...页次:p541 L-1,L-3原文:图10-a更正:图8-10a★ <深入浅出 MFC> 二版六刷 ★ 出版日期:1999/01页次:p72 L12原文:pEmp = &aBoss;更正:pEmp = &aManager;◆以下 p85~p88 的错误主要是 SavingAccount 笔误为 SavingAccout。

深入浅出MFC一解析

深入浅出MFC一解析

深入浅出MFC一Contents[Trial version] 目录[Trial version] 第0章你一定要知道(导读)[Trial version] 第1章Win32基本程序观念[Trial version] 第2章C++的重要性质[Trial version] 第3章MFC六大关键技术之模拟[Trial version] 第5章总观AlicationFramework[Trial version] 第6章MFC程序设计导论[Trial version] 第7章简单而完整:MFC骨干程序[Trial version] 第8章Document-View深入探讨[Trial version] 第9章消息映射与命令绕行[Trial version] 第10章MFC与对话框[Trial version] 第11章View功能之加强与重绘效率之提升[Trial version] 第12章打印与预览[Trial version] 第13章多重文件与多重显示[Trial version] 第14章MFC多线程程序设计[Trial version] 第15章定制一个AWizard[Trial version] 第16章站上众人的肩膀--使用Comonents&am;amActiveXControls[Trial version] 附录A无责任书评[Amber demo]owered By Gisun htt://目录第0章你一定要知道(导读)/1这本书适合谁/1你需要什么技术基础/1你需要什么软硬件环境让我们使用同一种语言本书符号习惯/3磁盘内容与安装范例程序说明第一篇勿在浮砂筑高台- 本书技术前提/3 第1章Win32 程序基本观念/3Win32程序开发流程/4需要什么函数库(.LIB)/4需要什么头文件(.H)/4以消息为基础以事件驱动之/5一个具体而微的Win32 程序/5程序进入点WinMain/10窗口类之注册与窗口之诞生/11 消息循环/12窗口的生命中枢—窗口函数/12 消息映射(Message Ma)雏形/13 对话框的运作/14模块定义文件(.DEF)/14资源描述文件(.RC)/15 Windows 程序的生与死/15闲置时间的处理:OnIdle /16 Console 程序/17Console 程序与DOS 程序的差别/17 Console 程序的编译链接/18JBACKU:Win32 Console 程序设计/19 MFCCON:MFC Console 程序设计/20什么是C Runtime Library 的多线程版本/22 进程与线程(rocess and Thread)/22核心对象/22一个进程的诞生与死亡/23产生子进程/23一个线程的诞生与死亡/24以_beginthreadex取代CreateThread/25线程优先权(riority)/26多线程程序设计实例/27第2章C++ 的重要性质/29类及其成员—谈封装(encasulation)/29基类与派生类—谈继承(Inheritance)/29this 指针/31虚函数与多态(olymorhism)/32类与对象大解剖/40Object slicing 与虚函数/42静态成员(变量与函数)/44C++程序的生与死:兼谈构造函数与析构函数/46四种不同的对象生存方式/47所谓“Unwinding”/48运行时类型信息(RTTI)/48动态生成(Dynamic Creation)/50异常处理(Excetion Handling)/50 Temlate /53Temlate Functions /53Temlate Classes /54Temlates 的编译与链接/56第3章MFC六大关键技术之模拟/57MFC类阶层/57Frame1范例程序/57MFC程序的初始化过程/59Frame2范例程序/61RTTI(运行时类型辨识)/65 CRuntimeClass与类型录/65DECLARE_DYNAMIC / IMLEMENT_DYNAMIC宏/66 Frame3 范例程序/71IsKindOf(类型辨识)/77Frame4 范例程序/77Dynamic Creation(动态生成)/78DECLARE_DYNCREATE / IMLEMENT_DYNCREATE 宏/79 Frame6 范例程序/84ersistence(永续生存)机制/91Serialize(数据读写)/91DECLARE_SERIAL/IMLEMENT_SERIAL 宏/95没有范例程序Message Maing(消息映射)/97Frame7 范例程序/104Command Routing(命令循环)/112Frame8 范例程序/119本章回顾/130第二篇欲善工事先利其器-Visual C++ 5.0 开发工具第4章Visual C++ - 整合性软件开发环境安装与组成四个重要的工具内务府总管:Visual C++ 整合开发环境关于roject关于工具设定Source BrowserOnline Hel除错工具VC++ 除错器Excetion Handling程序代码产生器—AWizard东圈西点完成MFC 程序骨干Scribble Ste0威力强大的资源器Icon 器Cursor器Bitma器ToolBar器VERSIONINFO资源器String Table器Menu 器Accelerator 器Dialog 器Console 程序的项目管理第三篇浅出MFC程序设计第5章总观Alication Framework /130 什么是Alication Framework /130侯捷怎么说/130我怎么说/131别人怎么说/133为什么使用Alication Framework /134 Microsoft Foundation Class(MFC)/136 白头宫女话天宝:Visual C++与MFC/137 纵览MFC /138General urose classes /138Windows AI classes /139Alication framework classes /140High level abstractions /140Afx全局函数/140MFC宏(macros)/141MFC数据类型(data tye)/142第6章MFC程序设计导论——MFC程序的生死因果/144 不二法门:熟记MFC类的阶层架构/144需要什么函数库(.LIB)/146需要什么含入文件(.H)/146简化的MFC程序架构—以Hello MFC为例/148Hello 程序原始代码/148MFC 程序的来龙去脉/152我只借用两个类:CWinA和CFrameWnd /152 CWinA—取代WinMain的地位/152CFrameWnd—取代Wndroc的地位/154引爆器—Alication object /155隐晦不明的WinMain /156AfxWinInit - AFX 内部初始化动作/158CWinA::InitAlication /160CMyWinA::InitInstance /160CFrameWnd::Create 产生主窗口(并注册窗口类)/161 奇怪的窗口类名称Afx:b:14ae:6:3e8f/168 窗口显示与更新/170CWinA::Run - 程序生命的活水源头/170把消息与处理函数串接在一起:Message Ma机制/172来龙去脉总整理/173Callback 函数/174闲置时间(idle time)的处理:OnIdle/176 Dialog 与Control/178通用对话框(Common Controls)/178本章回顾/179第7章简单而完整:MFC 骨干程序/180 不二法门:熟记MFC 类的阶层架构/180 MFC程序的UI新风貌/180Document/View 支撑你的应用程序/181 利用Visual C++工具完成Scribble ste0 /183骨干程序使用哪些MFC类?/183Document Temlate的意义/187Scribble的Document/View 设计/190主窗口的诞生/192工具列和状态列的诞生(Toolbar &am; Status bar)/193 鼠标拖放(Drag and Dro)/195消息映射(Message Ma)/196标准菜单File/Edit/View/Window/Hel/196对话框/199改用CEditView /199第四篇深入MFC程序设计/199第8章Document-View 深入探讨/200为什么需要Document-View(形而上)/200 Document /200View /201Document Frame(View Frame)/202Document Temlate /202CDocTemlate 管理CDocument / CView / CFrameWnd /202 Scribble Ste1 的Document(数据结构设计)/207 MFC Collection Classes 的选用/207Temlate-Based Classes /208Temlate-Based Classes 的使用方法/209CScribbleDoc 的修改/209 SCRIBBLEDOC.H /211 SCRIBBLEDOC.C /212文件:一连串的线条/215 CScribbleDoc 的成员变量/215 CObList /215CScribbleDoc 的成员函数/215 线条与坐标点/217CStroke 的成员变量/217 CArray&lt;Coint, Coint&gt; /217 CStroke 的成员函数/217Scribble Ste1 的View:数据重绘与/218 CScribbleView 的修改/218 SCRIBBLEVIEW.H /219SCRIBBLEVIEW.C /220View 的重绘动作—GetDocument和OnDraw /222 CScribbleView的成员变量/222 CScribbleView的成员函数/223View 与使用者的交谈(鼠标消息处理实例)/223 ClassWizard 的辅佐/224WizardBar 的辅佐/225Serialize:对象的文件读写/225Serialization以外的文件读写动作/226 台面上的Serialize动作/227台面下的Serialize写文件奥秘/231台面下的Serialize读文件奥秘/233 DYNAMIC / DYNCREATE / SERIAL 三宏/240 Serializable 的必要条件/244CObject 类/245IsKindOf/245IsSerializable/245CObject::Serialize/245CArchive类/246oerator&lt;&lt;和oerator&gt;&gt;/246效率考虑/250自定SERIAL宏给抽象类使用/250在CObList中加入CStroke 以外的类/250 Document与View 交流—为Scribble Ste4做准备/254 第9章消息映射与命令循环/255到底要解决什么/255消息分类/256万流归宗Command Target(CCmdTarget)/256三个奇怪的宏一张巨大的/257 DECLARE_MESSAGE_MA 宏/257消息映射的形成:BEGIN_/ON_/END_ 宏/258米诺托斯(Minotauros)与西修斯(Theseus)/261 两万五千里长征—消息的流窜/265直线上溯(一般Windows 消息)/265拐弯上溯(WM_COMMAND 命令消息)/268罗塞达碑石:AfxSig_xx 的秘密/273Scribble Ste2:UI 对象的变化/277改变菜单/277改变工具列/278利用ClassWizard连接命令项识别代码与命令处理函数/280 维护UI对象状态(UDATE_COMMAND_UI)/282本章回顾/285第10章MFC 与对话框/285对话框器/286利用ClassWizard 连接对话框与其专属类/288ENDLG.H /290ENDLG.C /291对话框的消息处理函数/292MFC中各式各样的MA /294对话框数据交换与查核(DDX &am; DDV)/294MFC中各式各样的DDx_函数/297如何唤起对话框/297本章回顾/299第11章View功能之加强与重绘效率之提升/299同时修改多个Views:UdateAllViews 和OnUdate/300 在View中定义一个hint/302把hint传给OnUdate/304利用hint增加重绘效率/305可卷动的窗口:CScrollView /307大窗口中的小窗口:Slitter /313分裂窗口的功能/313分裂窗口的程序概念/314分裂窗口之实现/315本章回顾/317第12章印表与预览/317概观/317打印动作的后台原理/320MFC预设的打印机制/324Scribble打印机制的补强/333打印机的页和文件的页/333配置GDI绘图工具/334尺寸与方向:关于映射模式(坐标系统)/334分页/336表头(Header)与表尾/338动态计算页代码/338打印预览(rint review)/339本章回顾/339第13章多重文件与多重显示/339 MDI 和SDI /340多重显像(Multile Views)/340窗口的动态分裂/342窗口的静态分裂/343 CreateStatic 和CreateView /343窗口的静态三叉分裂/345Grah 范例程序/346静态分裂窗口之观念整理/354同源子窗口/355 CMDIFrameWnd::OnWindowNew/355 Text 范例程序/356非制式作法的缺点/361多重文件/361新的Document类/362新的Document Temlate /363新的UI系统/364新文件的文件读写动作/365第14章MFC多线程程序设计(Multi-threaded rogramming in MFC)/367从操作系统层面看线程/367三个观念:模块、进程、线程/367线程优先权(riority)/368线程排程(Scheduling)/369Thread Context /370从程序设计层面看线程/371Worker Threads 和UI Threads /371错误观念/372正确态度/372MFC多线程程序设计/372探索CwinThread/372产生一个Worker Thread/374产生一个UI Thread /375线程的结束/376线程与同步控制/376 MFC多线程程序实例/378第15章定制一个AWizard /380到底Wizard是什么?/381Custom AWizard 的基本操作/381剖析AWizard Comonents /385Dialog Temlates 和Dialog Classes /385Macros /386Directives /387动手修改To Studio AWizard/387利用资源器修改IDD_CUSTOM1对话窗画面/387 利用ClassWizard 修改CCustom1Dlg类/388改写OnDismiss 虚函数在其中定义macros /389 修改text temlate/389To Studio AWizard执行结果/390更多的信息/390第16章站上众人的肩膀—使用Comonents和ActiveX Controls/391 什么是Comonent Gallery /391使用Comonents /393Slash screen /393System Info for About Dlg /394Tis of the Day /394Comonents实际运用:ComTest 程序/395修改ComTest 程序内容/409使用ActiveX Controls /411ActiveX Control 基础观念:roerties、Methods、Events/411ActiveX Controls 的五大使用步骤/412使用“Grid”ActiveX Control:OcxTest 程序/413[Amber demo]owered By Gisun htt://第0章你一定要知道(导读)这本书适合谁深入浅出MFC是一本介绍MFC(Microsoft Foundation Classes)程序设计技术的书籍。

《深入浅出MFC》中关于永久保存机制的问题

《深入浅出MFC》中关于永久保存机制的问题

《深入浅出MFC》中关于永久保存机制的问题《深入浅出MFC》中谈到Persistence(永久保存机制)时,P126中提出了一个例子:我们可以在每次记录对象内容的时候,先写入一个代码,表示此对象的类是否曾在文件中记录过了。

如果是新类,乖乖地记录其类名称;如果是旧类,则以代码表示。

这样可以节省文件大小以及程序用于解析的时间。

下面是新的构想,也就是Serialization的目标:20 03 84 03 ;Document size06 00 ;CObList elements countFF FF ;new class tag02 00 ;schema07 00 ;class name string length43 53 74 72 6F 6B 65 ;“CStroke”02 00 ; DWordArray Size28 00 13 00 ; point28 00 13 00 ; pointFF FF ;new class tag01 00 ;schema0A 00 ; class name string length43 52 65 63 74 61 6E 67 6C 65 ; ”CRectangle”11 00 22 00 33 00 44 00 ; CRectFF FF ;new class tag01 00 ; schema07 00 ; class name string length43 43 69 72 63 6C 65 ; “circle”55 00 66 00 77 00 ; CPoint & radius01 80 ; old class tag02 00 ; DWordArray size28 00 35 00 ; point28 00 35 00 ; point03 80 ; old class tag11 00 22 00 33 00 44 00 ; CRect05 80 ; old class tag55 00 66 00 77 00 ; CPoint & radius我看到这里有一个疑问,比如01 80 ; old class tag那么它表示旧类,但是是表示哪一种旧类呢?这个机制是如何识别的呢?还有schema又有什么意义呢?(或者说什么作用呢?)。

浅析MFC特殊界面及双缓冲技术的实现

浅析MFC特殊界面及双缓冲技术的实现
Sci ce en and T e chno o Inovaton l gy n i H e al r d


研 究 报 告
x , 3 用 于 创 建 圆 角的 椭 圆 , 的 宽 3y : 它 度 和 高 度 2 S t id wR n HR N h g , OO .eW n o g ( G R n B L R d a : 函数用 于设 置窗 1 区域 , b e r w) 该 : I 该 窗 1 区 域 决 定 了 系 统 允 许 绘 制 窗 口 的 范 : 1 围 , 出该 窗 口 区 域 的 范 围 系 统 一 律 不 显 超
示 。ห้องสมุดไป่ตู้
参数说 明 : HRGN hRg 指 向一 个 区 域 的句 柄 , n:
把 窗 口设 置 在 该 区域 。 果 此 参 数 设 为 NU 如 L 函数 不 设 置窗 口 区域 。 L,
BOOL b d a 参 数为tu , 作系统 Re r w: re操 在设 定区域后重 新绘制窗 口, 之不 。 反 } 图片 显 示在 O P it 函数 中设 置( n an0 代 码 如下) : v i C lisfc Dl : od E l ea e g :On an ( p P i t) { … … // 此 处 代 码 省 略
E ,0 ) ; +2
CDilg : ao :On Bu tn Wn (n L to DO F
lg , p it) { as on } 代码详解 :
L S T e d sa e HW ND hW RE UL S n Me s g (
nd, U I NT M s g, W PA RAM w Pa a , LP rm ARA M 1 a Par m
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

“深入浅出MFC(第2版)(附光盘)”的全部评论
1.现在有很多人说C/C++已经没落了,在不久的将来终将退化到现在汇编语言(Assembly)的地位,基于C++的MFC自然也不能避免被淘汰的命运。

我不否认C++/MFC面对最新的基于动态语言的Web应用显得是多么的力不从心,也不否认大红大紫的Java、Perl、C#等后辈抢夺了MFC无数的风头,但是无论是出于对曾经在Win32历史上扮演过至关重要的角色的颇具神秘色彩的MFC的仰慕,还是出于希望深入理解编程语言与操作系统的交互关系的目的,抑或是为了能更有效的编写Win32应用程序,研究MFC内部运行机理都是必要的。

其实随着现在嵌入式开发的增长,C/C++的使用比例又有了一定程度的增加,这在今年的TIOBE排行榜上也可以得到印证。

而且有很多企业以前的系统都采用的是MFC,有大量的代码需要维护,
所以阅读侯俊杰先生所著的《深入浅出MFC第二版》(英文名Dissecting MFC 2nd)之旅。

一个多月断断续续的研读,在合上此书最后一页的时候,我有了一种豁然开朗的感觉。

以前也看过一本介绍MFC程序设计的书籍,不过多是以例子为主,尽管有能力编写图形界面了,不过却是知其然不知其所以然——对于通过VC向导生成的代码有好多不明所以的地方,所幸MFC的使用者只需要按部就班地修改指定的函数体就行了,其余的交给IDE(Integrated Development Environment 集成开发环境)好了——此所谓第一种层次吧。

不过VC++相比其它的RAD(Rapid Application Development 快速应用程序开发)工具(如VB)却是有着本质的不同。

在VC++中,虽然使用者可以同VB一样通过IDE完成大部分的工作,但是VC++并不掩饰反应程序运行机理的代码;而在VB中程序员能看到的只有自己添加的代码。

很难说那种方式一定最好吧,毕竟各有各的用户群。

VB针对入门级的程序员,以简单快速的开发方式吸引大家上手;VC++则面向系统级的程序员,提供高率的编译代码以及访问底层系统属性的能力。

透过VC++暴露给程序员的代码,侯俊杰先生引领读者将MFC的各项重要机制一一“剖膛破肚”。

令我大开眼界的是MFC的框架竟然能在编译器不提供RTTI(运行时类型信息)支持的情况下,完成了该框架所必须的RTTI功能。

MFC将Macro(宏、巨集)的功能简直发挥到了极致。

尽管相较于Java、C#等面向对象领域的后起之秀来说,MFC的宏确实显得有些笨拙和缺乏可读性,但是在当时的环境之下,通过宏来实现却不得不说是一种优雅。

剖析MFC让我领略到一个应用程序框架的结构,能被成为框架而不是仅仅是类库的东西,关键在于类与类之间绝不是简单独立的关系。

在框架中,类和类必须
通力协作才能完成所需的功能。

也就是说,我们在使用框架的时候绝对可以像使用类库一样随心所欲——这是当然的咯,要得到框架的服务,自然要遵循人家的游戏规则。

这就是很多习惯了字符环境下编程的C程序员过渡到 MFC框架下一时间难以适应的原因。

我不是那种在理解了原理之后就忘记当初初试MFC的痛苦经历的人,也许正是通过不断的挫折和积累,让我在阅读《深入浅出MFC》时不断能从以前的实践中找到书中所述要点的印证,不时地得到新的理解和启示,同时也鼓励我继续地把这本书好好的研读下去。

如果必须要为C程序员做一个关于应用程序框架的恰当的比喻的话,我想可以把这个框架理解成main函数中传入命令行参数的机制:为了从命令行中获取信息,你需要定义argc, argv 两个参数,OS会自动帮你填入值;同样的道理,为了捕捉鼠标事件、按钮的点击事件并设置
相关函数进行处理,你自然不能越MFC的规矩办事咯。

希望这个有些简陋的比喻能对挣扎在MFC一线的苦手有所帮助和启示吧。

另外,我还发现一本孙鑫先生的VC书籍也甚是不错,是按视频改编的,也建议大家看看,视频在网上都能找到。

2.这本书写于2001年,至今历经9年而不衰,我买到时已是第22次印刷,虽然出版年代比较久,但内容至尽多数仍不过时,
侯先生的这本书介绍MFC视角独特,主要是分析MFC框架,以让人从宏观上把握和更好的使用MFC。

我需要强调的是,这不是一本针对MFC初学者需要快速上手写程序而准备的书,而是一本增加MFC使用功力的书,您很有必要在阅读本书前具备如下知识:
1.c++知识作为基础铺垫--比如明白概念“继承”,“多态”甚至“模板”等。

2.具备所谓的Windows SDK编程经验--比如知道Windows程序从WinMain开始执行,知道一个程序需要注册窗口类,创建窗口,知道消息循环,窗口处理函数等概念。

3.你最好具备MFC程序编写经验,也就是说知道在MFC中要写一个程序实现自己的功能应该在哪里增加代码,映射消息等。

再强调一次,这是本向高手进阶的书(阅读数万行代码的大型框架程序时会有感触),不是教初学者学习怎样写MFC程序的书,作为初学尤其是想快速用MFC写程序的人,这本书不合适。

作者侯先生的许多书籍深受读者喜爱,侯先生自评中“好读书,求甚解”一句在本书的内容中做了完美诠释。

也许有人会认为书的内容有些罗嗦,但我理解和欣赏侯先生的这些内容。

摘录几句书中经典的话:
1.MFC框架简化程序书写,但不是让程序更容易阅读。

2.以往你只是知道踩刹车时不要踩离合器,现在通过对本书的
阅读,你理解了这样做是为了避免失去引擎的刹车牵制力。

同时,希望侯先生能够有一个健康的身体,良好的心态,能够为读者继续书写和翻译优秀的作品,谢谢!
3.现在有很多人说C/C++已经没落了,在不久的将来终将退化到现在汇编语言(Assembly)的地位,基于C++的MFC自然也不能避免被淘汰的命运。

我不否认C++/MFC面对最新的基于动态语言的Web应用显得是多么的力不从心,也不否认大红大紫的Java、Perl、C#等后辈抢
夺了MFC无数的风头,但是无论是出于对曾经在Win32历史上扮演过至关重要的角色的颇具神秘色彩的MFC的仰慕,还是出于希望深入理解编程语言与操作系统的交互关系的目的,抑或是为了能更有效的编写Win32应用程序,研究MFC内部运行机理都是必要的
4.。

相关文档
最新文档