MFC Windows程序设计(第二版)精华浓缩笔记

      《MFC windows程序设计(第二版)》是一本介绍使用MFC(而不是win32 API),进行32位Windows应用程序设计的经典书籍。作者Jeff Prosise,被誉为MFC领域的Petzold。作者在前言中写道:“我的目标就是为C++程序员写出一本可与为C程序员所写的那本永恒的、无出其右的《Programming Windows》相媲美的好书。”
       这本书与众不同之处在于它不以Appwizard向导建立程序开始,而是直接使用MFC类库,利用各类之间的耦合自建程序,比起其他(尤其是千篇一律的国内)书籍来,能给人耳目一新的感觉。
       我是在学校图书馆发现这本书的,当时的感觉是:妈的,人生的大起大落,真是太刺激了。怎么也没想到在那一堆老古董里还有这么新的经典。
       我希望能用一个暑假搞定它,学完每一章,我都会把读书笔记和一些自己的想法写个文档放上来,希望能给没我幸运的各位网友一些帮助。
       因为“每天你都有机会跟别人擦身而过,你也许对他一无所知,不过也许有一天他会变成你的朋友或是知己。”,希望大家支持。 


第一章、Hello MFC

精华浓缩:
    我们大家都知道每一个Windows程序都以一个Winmain()开始,MFC的当然不例外。但在MFC中,它被隐藏了起来。MFC定义了一个全局应用程序对象(姑且称其为theApp),而每一个全局对象都是在主程序进入点(EntryPoint)之前由启动代码构造完成的。换句话说,程序在进入Winmain()之前,内存中将有了一个theApp对象。这样,theApp的成员函数就可以为我们所用了。也就是这时,Winmain()出场了...  
    Winmain()首先调用theApp(就是应用程序类)的成员函数InitInstance()虚函数(要覆盖),构造主窗体,并显示更新,之后再调用Run()(一般不要覆盖),就进入消息循环。  
    在SDK程序设计时,消息总是以调用一个窗口的窗口过程(WndProc())来表明自己的存在。同时与此调用相伴随的通常是四个参数:消息所指窗口句柄、一个消息ID和两个名为wParam和lParam的32位参数。后两个参数值依消息不同而异。而在MFC中,消息映射取代了窗口过程作为消息与其处理之间的通讯接口。
    从CCmdTarget派生的任何类都可以包含消息映射。消息映射是一个将消息与其处理函数(作为类的成员函数)相互关联的表。它是MFC避免使用冗长的虚函数表(VTable)的一种方式(试想,如果每一个进入内存中的类有一个虚函数表,则每一个类对象实例就都要有一个指针VPointer(4字节)指向那个表,这个内存消耗是没法估量,也是多余的)。MFC用三个宏就解决了问题。
    因此,将一个消息映射添加到一个类中,要做三项工作:
    1)通过将DECLARE_MESSAGE_MAP语句添加到类声明中,声明消息映射;
    2)通过放置标示消息映射起止的宏执行消息映射,相应的类将在对BEGIN_MESSAGE_MAP和END_MESSAGE_MAP的调用之间消息和其处理函数;
    3)添加成员函数定义处理消息。
    关于消息映射工作机制的情况,有兴趣的网友可以参考《深入浅出MFC》,那里讲的很详细。
    这本书也提供了自建Windows程序的方法,在New-Project中选Win32 Application,再在接下来的窗口中选A Empty Project。进入主环境之后,再用Project-Add To Project添加文件即可。编译之前,记着把编译选项改为Use MFC In A Shared DLL。

一些知识点:
1)匈牙利标记法:在每个变量名之前,用一个或多个小写字母标识变量类型。同时成员变量以m_开头。如m_strWndClass,m_表示这是个类数据成员,str表示这是类型为CString类的变量。常用类型前缀:b-BOOL,h-Handle,n-Int,l-long Int等。
2)文档/视图结构:使数据和数据的表现相分离,以简化程序设计的一种程序结构,后有章节详述。
3)CObject:大多数MFC类从CObject中直接或间接派生,它为其派生类提供了三个重要特性:序列化支持;运行期类型信息;诊断与调试支持。
4)Afx函数:Afx是Application Framework的简写,以Afx开头的函数都是全局函数,可以在任一个类实现中调用。典型的如AfxMessageBox()、AfxGetApp()等。
5)_T宏:用来将字符串常量字符设置为“中性”。这样不管是ANSI字符集还是Unicode,字符串都将与系统无关。关于_T的详细信息,作者建议阅读Jeffrey Richter的《Advanced Windows》或MSDN。

 

 

  • 0
    点赞
  • 1
    收藏
  • 打赏
    打赏
  • 0
    评论
此代码是随书光盘拷贝。 此版本是网上最详细的书签版本,也是最清晰的版本。 MFC Windows程序设计(第2版修订版) (Programming Windows with MFC, 2nd Edition) 基本信息 作者: (美)Jeff Prosise [作译者介绍] 译者: 北京博彦科技发展有限责任公司 出版社:清华大学出版社 ISBN:9787302150428 上架时间:2007-5-22 出版日期:2007 年5月 开本:16开 页码:1166 版次:1-1 内容简介   《mfc windows程序设计(第2版)》是对其极为经典的第1版的全面更新,本书不仅扩展了已被认为是权威的关于microsoft用于windows api的功能强大的c++类库的阐述,还新增了有关com、ole和activex的内容。本书的作者,jeff prosise,用其无与伦比的技巧向读者讲述了mfc程序设计中的基本概念和主要技术——再次阐释了在32位windows平台上进行了快速的面向对象开发的完美方法。    本书涵盖了以下专题:    事件驱动程序设计和mpc的基础知识    文档/视图体系结构    位图、调色板和区域    多线程和线程同步    mfc与组件对象模型(com)    activex控件    《mfc windows程序设计(第2版)》见解深刻,并附带有辅助学习的资源——包括在随附的cd-rom中提供了大量代码实例。    要理解如何利用mfc库中提供的成千上万的预编译、预测试的代码的优点,本书——及其作者——将是您独一无二的选择。 作译者 本书提供作译者介绍   Jeff Prosise是一位作者、教员和讲师,他以Windows编程和教授别人如何进行Windows为生。作为一位在Windows程序设计MFC和COM领域世界知名的权威,他还是《PC Magazinge》和《Microsoft Systems Journal》杂志的组稿编辑。 目录 鸣谢 序言 第ⅰ部分 windowsmfc基础  第1章 hello,mfc  第2章 在窗口中绘图  第3章 鼠标和键盘  第4章 菜单  第5章 mfc集合数  第6章 文件i/o和串行化  第7章 控件  第8章 对话框和属性表 第ⅱ部分 文档/视图体系结构  第9章 文档、视图和单文档界面  第10章 滚动视图、html视图以及其他视图类型  第11章 多文档和多视图  第12章 工具栏、状态栏和组合栏  第13章 打印和打印预览 第ⅲ部分 高级篇  第14章 计时器和空闲处理  第15章 位图、调色板以及区域 . 第16章 公用控件  第17章 线程和线程同步化 第ⅳ部分 com,ole和activex  第18章 mfc和组件对象模型  第19章 剪贴板和ole拖放  第20章 automation  第21章 activex控件 序言   像我的许多同行一样,我学习Windows编程是从读Petzold的书《Windows程序设计》——一本所有Windows程序员都使用的Windows编程圣经——开始的。在刚刚成为一名MFC程序员时,那天我冲进书店,想买一本能够与ProgrammingWindows相媲美的MFC编程书籍,但是却没有结果。于是我决定自己写一本这样的书。它正是您手中所拿到的这本书,也正是当初我在初学MFC时,希望拥有的那本书。.   正如您所知,MFC是用于Windows编程的Microsoft C++类库。本书并不是一本关于C++的书,而是一本关于使用MFC而不是Windows APl,进行32位Windows应用程序编程,以访问操作系统的基本特性和服务的书。它原本为以下两种编程人员所写:   曰打算学习MFCWindowsAPl程序员   曰未进行过Windows编程的程序员   无论您属于哪种人,我假设您已经了解C++,而且熟悉C++语法,如派生类及虚函数。如果是这样的话,您已在征肠MFC编程之山的历险中迈出了坚实的第一步。   即使是有经验的Windo;。程序员在初读MFC代码时也会感到迷惑。一部分是由于VisualC++代码生成向导所生成的代码所致,另一个原因是因为无数行代码隐藏在MFC类库中。这正是本书使用特殊的方法来写MFC的缘由。本书从让您亲自手写代码开始(不用向导),使用MFCl.0的应用程序结构风格,也就是说,既不用文档也不用视图。只有在您掌:握了上述的基础知识,初步认识了简单的MFC类库如CWnd和CWinApp之后,我才开始介;绍向导并教您使用MFC文档视图结构的方法。您将逐渐理解Windows的关键组件及它的消息驱动机制,如图形设备接口(GDl)。我相信用这种方法可以使MFC的学习变得生动有趣而不是令人气馁。我认为一旦您认真地学完这本书,然后再站在老练的Windows程序员的角度来回顾学习过程中的甜酸苦辣,您将同意我的观点。   本书分为4个部分。第1部分,介绍了WindowsMFC编程的主要原则,以一个示例程序"Hello,MFC"开始,然后逐一简要讲解菜单、控件、对话框以及其他用于组建应用程序的模块。第2部分,在第1部分的基础之上,对文档视图结构做详细讲解,特别是第9、10、11章,揭示了实现文档视图的神奇之处,不仅介绍了如何编写简单的文档视图程序,而且教您一些高级功能,如打印预览和拆分窗口视图。第3部分涵盖了一些WindowsMFC的更鬲级的功能,如颜色选项板、位图句柄及多线程程序。在第4部分,您将了解到MFC如何包容COM、OLE和ActiveX,如何编写支持COM的组件及应用程序。在读完第21章之后,您将更加精通使用MFC进行Windows 32位编程的技术。您也将拥有丰富的源代码用于您的第一   第2版的新特点   读过本书第1版的朋友将会注意到第2版的两个相当明显的变化。首先,本版包括7个新章节,1章用于讲解MFC视图类,1章涵盖MFC集合类;1章介绍MFC文件I/0和串行化机制,4章讨论了MFC和COM的关系。MFC不是类似活动模板库(ATL)的通用COM框架,但是MFC使编写某些COM程序更容易,使编写ActiveX控件的过程更简单,而且它使编写自动化(Automation)服务器程序(使用COM技术来供脚本客户调用的程序)变成了二件轻而易举的事。..   第2版的主要变化是关于向导的知识。在第1版中并没有提到向导。在第2版中1-3章使用手写的示例程序,但到了第4章就使用AppWizard和ClassWizard来生成代码。这样做的原因是,我始终认为代码生成向导会影响MFC的学习,它只应由老练的程序员来使用。但我也逐渐认识到,实际上,有很多MFC程序员在使用MFC向导来做某些工作,如编写ActiveX控件,在此时不用向导是很不明智的。经过深思熟虑之后,我决定加上这些内容。   尽管这些新内容是关于向导的使用,然而它现在不是,以后也不会是一本仅仅介绍如何在向导中单击按钮的书。在介绍了一个像如何用ClassWizard编写消息句柄之类的基本技巧之后,我在给出代码时,将不再赘述这些内容。当然,。向导永远不能超越您的能力去做任何事,因此键人所有手写的代码是完全可行的。   在讲述MFC编程的书中使用向导的缺点是,向导生成的程序不适合发表。本书的第一版印刷了每个程序文件的代码。本版书没有这样做,而只是包括了“相关”的源代码文件,其他的都放在CD-ROM中,为什么?因为印刷这些代码会使本书增加一倍的厚度而没有相应增加内涵。其中一些代码是由Visual C++6.0的MFC向导产生的,甚至没有被编译(详细内容请参见第4章)。我并不为本书中向导生成的代码而得意,因为其中充斥着随意生成的空行、不连贯的注释和无用的函数。对那些以编写清晰易读的示例源代码为骄傲的作者来说,向导生成的东西是一剂苦药。   然而,向导代表了Windows编程的新法则,它们是你、我及所有人都必须习惯的重要事物。但令人遗憾的是,VisualC++开发小组没有给我们一个真正的向导,而只是一个冒充向导的玩具。在他们能够做到以前,我们得习惯现有的向导。   CD.ROM中的内容   本书随附的CD-ROM包括书中全部示例程序的源代码,它们都在Visual C十十6.0和MFC 6.0环境下编写、编译而成,并在Win32平台上测试通过。如果没有特别说明它们都与Windows 98、WindowsNT4.0及Windows 2000兼容,其中大部分也与Windows 95及WindowsNT 3.51兼容。   您可用CD—ROM的根目录下的安装程序来将CD-ROM中,的内容复制到硬盘里,也可只复制其中\Code目录中的代码。我们在此目录中为书中每章各建了一个子目录——Chap01、Chap02,依次类推。在这些子目录中存放示例程序。每个程序的源代码文件都有一个相应的发布版本的EXE文件,以及您可使用Visual C++的Open Workspace命令来打开的workspace(DSW)文件。   JeffProsise   1999年3月12日...   

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页
评论

打赏作者

c_vector

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值