天天看点

孙鑫VC++讲座笔记-(3、4)

孙鑫VC++讲座笔记-(3)——MFC编程原理性入门

这一课说实话只是对第一课内容在MFC编程中的具体化,如果对第一课学得透彻了,而要进行MFC编程,同时需要对MFC的整个过程都有点清晰的感觉的话,那么我们只要有 孙 老师为我们提供的Test程序就可以了,记住这个程序内的断点都已经设置好了,所以最好你不要随便删除一个断点,在自己调试过程中试着想想每一处断点都是干吗的,为什么会这样,如果有什么不懂的话,再仔细看看视频讲座的1小时20开始倒1小时23分左右的讲解,这将有助于你理解MFC的框架。如果看了这些还不够的话,那么我建议你可以看看侯杰的《深入浅出MFC》。

本节的后面部分,主要针对单文档程序的框架类和视图类两类窗口创建和销毁过程,以及窗口与对象的关系,在这里, 孙 老师介绍了一个Button类以及使用,着重强调窗口和对象的关系。这个对我这种自学VC的人来说,是一个盲点。

孙鑫VC++讲座笔记-(4)

这一课先从消息映射讲起,讲解如何用MFC的ClassWizard来帮助我们创建消息映射和消息响应函数。

接着讲解了DC即上下文设备,CDC在使用的时候,我们通常需要通过GetDC创建或得到DC设备,再通过ReleaseDC释放DC,而相对应的其它的CClientDC和CWindowsDC则不用再如此操作,在这类DC对象被构造的同时,便被GetDC而析构的时候也会自动被ReleaseDC。CClienDC和CWindowsDC的区别是,CClientDC取得的是资源设备客户区的DC,他的作用与CDC相似,所用的都是客户区的环境,相对应的CWindowsDC取得的是设备的客户区和非客户区(菜单栏、边框、标题栏)。在这里我个人再简单提三个DC,即CPaintDC、内存DC和打印机DC,CPaintDC是只能响应WM_PAINT消息的DC,即该DC创建后在其它消息内是不起作用的,只有当窗口收到WM_PAINT消息时,对CPaintDC所写的代码才起作用;内存DC其实也是由CDC类的实例,只不过他不是用GetDC取得资源设备上下文,而是对构造后的DC通过DC的CreateCompatibleDC()函数来设置内存设备上下文,显然他不与任何资源相关联,内存DC在图像的绘制方面用的比较多,可以克服图像的闪烁;打印机DC也是CDC的实例化,他对构造后之DC采用CreateDC来创建与打印机驱动等信息相关的DC,当然打印机DC在使用后必须用DeleteDC释放。

介绍DC的过程中, 孙 老师演示了简单的画线编程,其中涉及到CPen,CBrush等类,在这里就不再做展开了。

最后这一讲 孙 老师由CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH))这种函数的调用,给我们介绍了类的静态成员变量和静态成员函数。类的静态成员是只属于类的代码,从内存模型来说,只要包含静态成员的类在程序代码中被包含时,那么在程序代码被编译时静态成员的代码就被加载进来,当程序一旦运行,该部分就要在内存中得到分配;而相对应的非静态成员,则是属于对象的,假如程序代码中包含了一个类,但是类没有实例化任何对象,那么该类的非静态成员部分代码在编译时代码将不会被加载,所以程序运行时内存中也就不会分配任何空间给这些代码。

注:静态成员函数只能访问静态成员变量,静态成员变量只能在类外被初始化