VC++深入详解(1):MFC框架程序剖析

本文介绍了MFC(Microsoft Foundation Classes)的基础知识,指出MFC是微软对Windows API的面向对象封装,简化了应用程序开发。通过一个简单的MFC应用示例,揭示了MFC程序的执行流程,包括类的创建、WinMain函数的替代以及消息循环的处理。文章探讨了MFC如何在不显式调用Win32 SDK函数的情况下,实现了窗口的注册、创建和消息处理,强调了MFC与API之间的关系。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

学了一段Win32SDK应用程序以后,因为种种杂七杂八的事情,让windows程序设计的内容停滞了很长一段时间。但是我今天还是鼓足了勇气,继续开始后面的内容。(不过后面的笔记不再是跟着杨力祥老师的上课内容了,因为他对MFC的讲解似乎课程剩下的不是很足,所以我换了孙鑫老师的听)。
咱们直接从第三节课讲起吧。第一节课讲的是用Win32SDK应用程序写“hello world”,我们之前已经做过很多遍了,这里只简要的回顾一下整个程序的脉络:
WinMain函数是整个程序的入口,相当于C语言中的main函数,在WinMain中,我们完成了一下几个重要的事情:设计窗口类,注册窗口类,创建窗口,显示窗口,更新窗口,进入消息循环。在设置窗口类中,指明消息处理函数,并把这个重要的信息在注册窗口时告诉操作系统,而在消息循环,每当我的应用程序收到了消息,都会把这个消息投递到这个应用程序的消息队列中,然后程序依次从中取走消息,并把消息告诉操作系统,操作系统调用消息处理函数来响应这些消息。
首先,个人觉得windows应用程序跟dos下的控制台应用程序最大的区别有两点。第一点是表象的:控制台应用程序是“黑屏的”,而windows应用程序是基于“窗口的”;第二点是内在的,控制台应用程序的核心内容是与操作系统无关的(虽然我们总会频繁的使用printf是得能从屏幕上显示打印结果);而windows应用程序是跟操作系统密切相关的。
第二讲主要是复习C++里面的一些基本知识:类、继承、派生、多态、重载等等。这里就不提了。
下面我们言归正传,开始MFC的学习。MFC是微软基础类库,它是对我们前面使用的windowsAPI函数,使用面向对象的方法进行了封装,它大大的简化了应用程序的开发过程。(顺便吐槽几句,这个封装其实做的并不是非常出色,使用了大量的宏,而C++程序员是非常讨厌宏的,但是总而言之,用起来还不错,尤其是使用AppWizard开发向导以后)。
这节课的主要目的,就是在于向读者展示:尽管MFC对windowsAPI进行了封装,但是它的程序在执行的过程中,总是要遵循API里面设计窗口类,注册窗口类,创建窗口,显示窗口,更新窗口,进入消息循环的步骤。
首先,我们新建一个单文档的MFC应用程序,对于其他内容保持默认设定,然后我们不
侯捷的<深入浅出MFC>相信大家都已经很熟悉了,论坛上也有很多介绍,这里我就不多说了。 而李久进的<MFC深入浅出>,听说的人可能就少得多。原因听说是这本书当时没有怎么宣传,而自从1999年第1版后,似乎也没有重印过,现在市面上根本找不到,所以大部分人都不知道。我手里现在恰好有一本,是从图书馆借的。这本书全名为<MFC深入浅出——从MFC设计到MFC编程>李久进编著,华中理工大学出版。此书极佳! 和侯捷那本书比起来,这两本书的风格很不一样。侯捷的那书的特点是剖了很多MFC的源代码,喜欢用代码说明问题,包括自己模拟MFC的方面实现一个类似的构架(什么什么仿真),而李久进的那本书不是这样,他用了很多的图表,具体介绍了MFC干很多事的时候的具体过程,比如MFC创建的时候及退出的时候具体的调用函数的过程(具体函数的调用关系)。这觉得这部分极为重要,这也就是我推崇李久进这本书的原因。而侯捷的那本书这部分内容非常少。这想,这可能是由于侯捷觉得,这部分内容不需要单独介绍,大家自己剖代码就可以解决问题。这确实不错,李久进的那本书中的内容如果自己剖MFC的源代码,内容都可以找到。但这是一个非常花工夫的事情,更不要说MFC的实际代码中要考虑各种各样的问题(保护,检查),代码的思路不可能非常清楚,这无疑增加了读代码的难度。和自己花时间一点一点剖MFC代码相比,看看这本只有266页的书无疑有效得多。 从内容上来讲,侯捷的那本<深入浅出MFC>更关心的是MFC的设计,或者说更像是想知道MFC是如何做到它所做到的东西的——从目的上说,是希望在了解了MFC的实现方法以后,自己也做出一个类似的东西来(你看别人的源代码的时候,就是这个目的)。而李久进的那本<MFC深入浅出>更关心的是MFC的使用,看完这本书,当你需要做某件事的时候,你会很清楚MFC是在哪个函数中完成这个工作的,你知道应该重载哪个函数,知道如何实现你的功能。但看完侯捷的那本书,你只是学到了方法,而按照侯捷的方法,你可能还得用半年时间才能剖完相关的代码,学到李久进的那本书中所提到的东西。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值