“深入浅出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

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

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

浅析MFC特殊界面及双缓冲技术的实现作者:张丹丹来源:《科技创新导报》2012年第21期摘要:Vc++是微软推出的面向对象的可视化集成编程系统,随Visual C++的发布还包括MFC-微软基础类,MFC提供的类很多用于界面开发,并设计了合理的消息映射机制和相应的消息处理函数,实现设备环境绘图等。

中图分类号:TP3 文献标识码:A 文章编号:1674-098X(2012)07(c)-0004-021 引言,是经典的windows视窗和windows应用程序的开发平台。

为了减少程序设计人员工作开发量它提供有效的应用程序框架,对类进行了封装,大部分是从Cobject里派生而来的,包含窗口类、图形设备接口类、对象链接和嵌入类、文件和数据库类、输入/输出类、异常类等等。

利用MFC提供的类我们可以方便做出一些不规则形状的界面,同时利用双缓冲原理有效解决界面抖动或界面显示慢的问题。

当窗口被改变大小,被最小最大化,或被关闭再打开,或者被另一个窗口覆盖的时候,窗体都面临着重绘,于是Window触发WM_PAINT消息处理复杂图形的绘制,由于过多的刷频导致图形显示出抖动、缓慢等症状,利用内存设备环境,具体归纳为双缓冲技术,可以有效解决这一问题。

2 MFC提供的设备环境类MFC提供的类很多用于界面开发,其中一个重要的类—CDC,提供了处理设备环境,如显示器、打印机等设备的成员函数。

MFC将GDI(图形设备接口)封装在CDC类中,因此可以调用该类成员函数完成诸如各种颜色、尺寸,不同图形的绘图操作,同时GDI具有设备无关性,程序员也无需考虑设备的类型。

CDC的这种设备无关性,使Windows下的绘图等程序不直接面向物理设备,而通过虚拟的设备描述表进行。

设备描述表又称设备上下文或设备环境,它是一种Windows下的数据结构,它存储了设备绘图属性信息。

应用程序不能直接访问设备描述表,只能由各种相关API函数通过设备描述表的句柄间接访问该结构。

深入浅出mfc开发流程

深入浅出mfc开发流程

深入浅出mfc开发流程下载温馨提示:该文档是我店铺精心编制而成,希望大家下载以后,能够帮助大家解决实际的问题。

文档下载后可定制随意修改,请根据实际需要进行相应的调整和使用,谢谢!并且,本店铺为大家提供各种各样类型的实用资料,如教育随笔、日记赏析、句子摘抄、古诗大全、经典美文、话题作文、工作总结、词语解析、文案摘录、其他资料等等,如想了解不同资料格式和写法,敬请关注!Download tips: This document is carefully compiled by theeditor. I hope that after you download them,they can help yousolve practical problems. The document can be customized andmodified after downloading,please adjust and use it according toactual needs, thank you!In addition, our shop provides you with various types ofpractical materials,such as educational essays, diaryappreciation,sentence excerpts,ancient poems,classic articles,topic composition,work summary,word parsing,copy excerpts,other materials and so on,want to know different data formats andwriting methods,please pay attention!MFC(Microsoft Foundation Classes)是微软提供的一个 C++类库,用于开发 Windows 应用程序。

深入浅出MFC

深入浅出MFC

CShape::setcolor(2, (CRect*)&rect1); CShape::setcolor(3, (CRect*)&rect2);
Index

類別及其成員-談封裝(encapsulation) 基礎類別與衍生類別-談繼承(Inheritance) This指標


Example(cont’)
#0028 class CSquare : public CRect #0029 #0030 public: #0031 void display() { ... } #0032 }; // 四方形是一種矩形
Example(cont’)
CSquare square; //宣告一個矩形名為square CRect rect1, rect2; //宣告兩個四方形 CCirclቤተ መጻሕፍቲ ባይዱ circle;
compile
class CShape { ... public: void setcolor(int color, (CShape*)this) { this->m_color = color; } };
CRect::setcolor(2, (CRect*)&rect1); CRect::setcolor(3, (CRect*)&rect2);

四方形(Csquare)


color(資料) Display(行為)
Example-Csquare (cont’)

{
對Csquare物件的描述:
class CSquare // 常常我們以C 作為類別名稱的開頭
private:
int m_color; public: void display() { ... } // 通常我們以m_ 作為成員變數的名稱開頭

深入浅出DirectshowFilter

深入浅出DirectshowFilter

深入浅出DirectShow FilterFilter概述Filter是一个COM组件,由一个或多个Pin组成。

Pin也是一个COM组件。

Filter文件的扩展名为.ax,但也可以是.dll。

Filter根据其包含Input pin或Output pin的情况(或在Filter Graph的位置),大致可分为三类:Source Filter(仅有Output pin)、Transform Filter(同时具有Input pin和Output pin)和Renderer Filter(仅有Input pin)。

一般情况下,创建Filter使用一个普通的Win32 DLL项目。

而且,一般Filter项目不使用MFC。

这时,应用程序通过CoCreateInstance函数Filter实例;Filter与应用程序在二进制级别的协作。

另外一种方法,也可以在MFC的应用程序项目中创建Filter。

这种情况下,Filter不需注册为COM组件,Filter与应用程序之间的协作是源代码级别的;创建Filter实例,不再使用CoCreateInstance函数,而是直接new出一个Filter对象,如下:m_pFilterObject = new CFilterClass();// make the initial refcount 1 to match COM creationm_pFilterObject ->AddRef();因为Filter的基类实现了对象的引用计数,所以即使在第二种情况下,对创建后的Filter 对象的操作也完全可以遵循COM标准。

Filter是一个独立功能模块,最好不要将Filter依赖于其他第三方的DLL。

因为Filter 具有COM的位置透明性特点,Filter文件可以放在硬盘的任何位置,只要位置移动后重新注册。

但此时,如果Filter依赖其他DLL,则Filter对该DLL的定位就会出现问题。

C++学习由浅入深过来人图书指导

C++学习由浅入深过来人图书指导
2、《Windows程序设计》——了解Windows编程的本质,相关的API使用,Windows程序结构、消息传递机制。如果你想在Windows上开发你的COM程序了解一点本深入浅出MFC》——学习MFC的相关知识,了解MFC的封装知识,MFC的框架。个人认为通过本书学习作者对程序的剖析方法才至为重要,那样会帮你在ATL的各种Wizard产生的代码中不至于迷失方向。
6、《COM本质论》——让你透过现象看本质,如果学习COM不读此书真是让我不敢相信你是做COM编程的。个人认为此书是学习COM的最好的一本书,太精彩了,尤其是前几章一定会让你眼前一亮。书中对套间的描述更让我迷茫很久的问题,得到了最好的解决。但是学习本书一定要有良好的C++基础和对外国人叙述事物的语言的良好领悟能力。
10、ATL开发指南
首先声明本人并非COM/ATL高手,尽管本人接触他们已经有4年了,但是因为工作中的一些原因一直未能深入研究和广泛的实际的使用它们。不过回想学习它们的痛苦经历,实在是有点不堪回首。在此仅以此文和大家探讨一下学习它们的路径,以让后来人少走弯路。
我个人认为学习COM是一件不简单的事情,只有一步一个脚印踏踏实实的理解每个观点和理论才能真正懂得其精髓。那样才能在发生错误的时候,依靠自己的知识解决问题。我个人认为如果要学好COM/ATL没有一年的时间是肯定不行的,也许是我比较愚笨。个人认为需要COM/ATL的应该循序渐进,可以参考的书目有:
1、《C++ Primer》——学习C++语言。主要理解其中的继承、重载、多态、多重继承、虚函数、纯虚函数、C++模板,这些都是以后学习COM的基础。因为C+ +对COM的实现是完全支持的,只有在C++上才能实现COM所有功能,体现其无穷魅力。很多书在说明COM原理的时候也是使用C++给予说明的。《COM技术内幕》中为了说明COM的使用了C++的多重继承和纯虚函数,MFC使用了嵌套类实现COM,ATL使用多重继承实现COM。不要认为这些基础不重要,在很多的满口继承和重载的C++高手中,很多人都不知道什么叫纯虚函数?虚函数表是什么东西?它在内存中是怎么存储的?派生类中又如何?

侯捷+深入浅出MFC---第1

侯捷+深入浅出MFC---第1

稍后会出现一个makefile。关于makefile的语法,可能已经不再为大家所熟悉了。我想我有必要做个 说明。所谓makefile,就是让你能够设定某个文件和某个文件相比——比较其产生日期。由其比较结果来 决定要不要做某些你所指定的动作。例如: generic.res : generic.rc generic.h rc generic.rc 意思就是拿冒号(:)左边的generic.res和冒号右边的generic.rc 和generic.h 的文件日期相比。 只要右边任一文件比左边的文件更新,就执行下一行所指定的动作。这动作可以是任何命令列动作,本例 为rc generic.rc。 因此,我们就可以把不同文件间的依存关系做一个整理,以makefile 语法描述,以产生必要的编 译、链接动作。makefile 必须以NMAKE.EXE(Microsoft 工具)或MAKE.EXE(Borland 工具)处理之,或 其它编译器套件所附的同等工具(可能也叫做MAKE.EXE)处理之。
在windows3x时代窗口类只需注册一次即可供同一程序的后续每一个执行个体instance使用之所以能够如此是因为所有进程共在一个地址空间中所以我们把registerclass这个动作安排在只有第一个执行个体才会进入的initapplication函数中
Powered By Gisun
图 1-2 Windows 程序的本体与操作系统之间的关系 Generic.mak(请在DOS窗口中执行nmake generic.mak。环境设定请参考 p.224) #0001 # filename : generic.mak #0002 # make file for generic.exe (Generic Windows Application) #0003 # usage : nmake generic.mak (Microsoft C/C++ 9.00) (Visual C++ 2.x) #0004 # usage : nmake generic.mak (Microsoft C/C++ 10.00) (Visual C++ 4.0) #0005 #0006 all: generic.exe #0007 #0008 generic.res : generic.rc generic.h #0009 rc generic.rc #0010 #0011 generic.obj : generic.c generic.h #0012 cl-c-W3-Gz-D_X86_-DWIN32 generic.c #0013 #0014 generic.exe : generic.obj generic.res #0015 link/MACHINE:I386 -subsystem:windows generic.res generic.obj \ #0016 libc.lib kernel32.lib user32.lib gdi32.lib Generic.h #0001 //-----------------------------------------------------------------------------------------------------------------------
相关主题
  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.。

相关文档
最新文档