《VC++ 6简明教程》即VC++ 6.0入门精讲 学习进度及笔记

VC++6.0入门→精讲

2013.06.09,目前,每一章的“自测题”和“小结”三个板块还没有看(备注:第一章的“实验”已经看完)。

2013.06.16 第三章的“实验”、“自测题”、“小结”和“第11页的3.1.3应用程序举例”部分没看

2013.06.17 第四章的“实验”、“自测题”、“小结”没看

第一章 VC++6.0开发环境

²        第4页“1.1.2应用程序向导AppWizard”之前的内容很容易,无需再看

²        第5页对“消息映射”的概念定义、及Message Maps的各个部分的功能讲解的非常清晰,寥寥几句而已

²        第5页的底部有这么一句话:“单击“Add Variables”按钮,可以为这个控件映射值类型的成员变量或控件类型的成员变量,值类型的成员变量用于数据交换,控件类型的成员变量就是一个控件类的对象。”,一句话将“值类型”和“空间类型”讲清楚。

²        从第9页“1.3调试”到第17页“1.4联机帮助”之前,讲解调试和设置断点的方式,这些方法中常用的已经用过,但没有全部用过,在实际开发过程中,这些细节技巧的使用将事半功倍,所以,编程过程中如果遇到问题,可以在这部分找到合适的方法去调试。

²        第13页的例子是讲解:在单文档MFC程序中“添加一个鼠标右键单机的消息处理函数并完成其功能代码”

第2章 面向对象程序设计的概念

²        第二章主要讲解C++的相关语法知识,内容有30页,暂时跳过

第3章 MFC应用程序概述

²        第2页“2.消息和消息队列”之前介绍窗口的概念无需再看

²        第6页开始以“Win32窗口应用程序”为基础解析MFC程序的原理,这部分《Windows程序设计》讲的最浅显易懂而且更权威准确(尤其是珍藏版的用词更符合主流),所以,精讲文档相关章节无需再看,具体为第11页“3.1.3应用程序举例”之前所有都无需再看

²        第11页“3.1.3应用程序举例”讲解的内容在《Windows程序设计》中部,尚未看到相关章节,所以,看起精讲这部分内容有点吃力,先跳过,日后再看。暂时从16页的3.2节开始

²        这句很重要:在MFC类中,应用程序类CWinApp和框架窗口类CFrameWnd替代了主函数WinMain和窗口函数WndProc的功能,负责程序的初始化,退出时必要的清理,窗口的创建和消毁,消息循环等功能。

²        这节课对MFC的讲解很适合我,从16页的3.2开始,内容很精简到位。

²        “如果想让程序支持自定义的命令行参数” ,在CExam1_1App

²        “更改主框架窗口的风格,或者对窗口类的一些属性进行修改,”CMainFrame中,此时窗口句柄还不可用

²        CMainFrame::OnCreate()函数就是WM_CREATE消息的处理函数(这里的WM_CREATE有可能是主窗口框架的的消息,是否是view或者其它部分的消息,有待考证)

²        GetDocument()函数是很重要的一个成员函数,用于视图类与文档类的通信,OnDraw()是实现视图输出的关键函数,绝大多数的视图输出工作都在这个函数中完成。

²        OnDraw(CDC* pDC)成员函数,其参数pDC是指向CDC类对象的指针,负责文档显示的设备环境

²        在W32的窗口函数中,采用switch-case结构进行消息处理。而在MFC应用程序中,采用消息映射的方法,将消息映射到各个消息处理函数

²        对消息映射的讲解简单明了,值得借鉴。

²        对于消息映射的具体操作,本文档只用了从25页“3.3.2消息映射系统”到28页三页左右的内容就完全讲明白。

²

CObject

CCmdTarget

CWinThread

CWinApp

CWnd

CFrameWnd

CView

CDocument

图3-8  MFC类的继承关系

 

²       
看了这段话,就能明白为什么用户自定义消息映射的时候有一个值的范围限制:“每个窗口消息都固定地对应着一个整数值,系统定义的窗口消息保留从0到WM_USER整数值,用户自定义窗口消息的映射范围在WM_USER+1到0x7fff之间”。

²       
第29页3.3.4自定义消息处理,详细讲解了怎样自定义窗口消息。

第4章 资源和资源编辑器

²       
本节内容的第10页“4.1.3编辑器使用实例”之前的内容只是简单的描述,之前开发时已经懂,目前已看完,无需再看。

²       
加速键的使用有一点注意:完成“查找下一个”的加速键F3的定义方法有所不同:先输入ID,再选择右边“ASCII”单选钮,单击“Next Key Typed”按钮,再按键盘上的“F3”键。

²       
本节第12页“4.2菜单的使用”之前的全部内容无需在看,重点部分已经记录如上。

²       
要增加更多的菜单需要经过下面两步:①使用菜单编辑器创建菜单;②使用ClassWizard创建菜单命令消息处理函数,编写代码支持菜单所要实现的功能。

²       
菜单命令消息映射函数增加在哪一个类中,主要取决于哪一个类与函数所执行的功能相关。例如,一个菜单命令如果要输出一个图像,菜单命令消息映射函数应增加在视图类,因为视图类能方便地访问CDC对象实现图像输出。

²       
本节第16页的程序讲解了“增加命令处理函数和菜单更新处理函数”的联合使用和类的成员变量的使用,不过代码有点问题,有时间可以在测试一下。

²       
添加快捷菜单的步骤分两步:①增加一个快捷菜单。②增加快捷菜单项命令处理函数。

²       
本节第18页的程序讲解了快捷菜单即右键弹出菜单的添加方法。

²       
本节的如下内容不理解:为快捷菜单连接一个类

n        
将鼠标移到编辑状态的菜单上,单击右键选择ClassWizard菜单项,打开ClassWizard窗口,弹出Adding a Class对话框 。

n        
选择Select an existing class单击“OK”按钮,在弹出的Select
Class对话框中的列表中选择CExam4_1View,单击“Select”按钮。(当然在本例中,最终选择的是“Select an
existing class”,我的理解是:首先从Object中添加的只是一个资源,没有类跟他关联,自然,也就无法添加成员函数,所以添加一个类;又因为本身这个右键菜单是跟客户区中的view类相关的,所以选择添加一个现有的类,并选中“CExam4_1View”。因为在这之前有一个使用“Components and Controls”添加快捷菜单的一个动作,又试了一下在CMainFrame中增加一个快捷菜单,将类关联到CMainFrame后,在标题栏右键也就出现快捷菜单了。所以这两个步骤是一个必须一致的组合,我试了一下在CMainFrame类中添加资源在view中关联类,结果右键对谁都无效。这两步分别为“add pop-ip menu to:”和“associate with”)

²       
为DummyMenu设置它的下拉菜单。该菜单的ID为“ID_INDICATOR_TIME”;Caption为“TIME”;Prompt为“HH:MM AM”。Prompt的内容为ID定义字符串资源,它的长度将作为初始值决定窗格的大小,若不指定,在程序运行时,会出现“空文档”错误

²       
第28页。从下面一段代码可以看出在添加UPDATE_COMMAND_UI类型的消息映射后,得到的函数参数“CCmdUI *pCmdUI”的用法:

CTime time=CTime::GetCurrentTime(); //获取系统当前时间给time 变量

 CString sTime= time.Format(“%I:%M %p”); //时间值格式化复制给sTime

 pCmdUI->SetText(sTime);   //窗格内容设置为当前时间

从这个例子可以看出,所有的UPDATE_COMMAND_UI都是关联一个消息的,例如此处的“ID_INDICATOR_TIME”,这个时候pCmdUI参数将调用函数对这个消息进行响应,例如SetText,又因ID_INDICATOR_TIME用indicators数组关联到状态栏,所以就是对状态栏SetText

²       
本节的最后即28页讲到了定时器的使用,在熟悉了《Windows程序设计》相关内容之后,这些东西很容易理解,关键很实用,几句话就能知道在MFC中怎样使用定时器。

²       
至此,本节学习完毕,内容都是概念性的东西,无需专门再看第二遍,使用过程中遇到相关问题,可回来查找解决办法。

第5章  图形和文本输出

²       
MFC封装了GDI对象,提供了CGdiObject类和CDC类支持图形输出和文本输出。

²       
当视图窗口或窗口的一部分需要重绘时,系统会发给窗口一个WM_PAINT消息,MFC的窗口框架会将该消息映射到CWnd::OnPaint()函数,OnPaint()函数创建一个DC,并调用视图的OnDraw() 函数。(这点要理解:在《Windows程序设计》中对WM_PAINT消息的响应是在窗口过程中,但是在MFC中使用消息映射代替这一过程,所以为WM_PAINT映射了一个函数,应该是此处所说的CWnd::OnPaint()函数)

²       
绘图前必须准备好设备上下文(DC),在一个MFC应用程序获得DC的常用方法有两种:一种是接受一个参数为指向CDC对象的指针,另一种是构造CClientDC对象。

²       
也可以使用CClientDC类创建一个局部DC对象,例如,在键盘响应消息处理函数和鼠标响应消息处理函数中要进行文本输出或图形绘制时,通常要创建一个这样的对象,并使用this指针为该对象赋值。

²       
本章第4页使用两种获得DC的方式向客户区输出一个像素点,整体格式都不同,所以,如有必要可胡来看:pDC->SetPixel(CPoint(10,10),RGB(0,0,0));和dc.SetPixel(point,RGB(255,0,0))

²       
本节第6页“5.2文本处理”之前的最后一段讲解了在MFC中获取鼠标指标的方法,因为有了消息映射的缘故,操作起来相当方便,因为鼠标的坐标点已经以参数的形式传到映射函数。(这点与《Windows程序设计》中要在lParam中获取和更简捷)

第8章 文档和视图

上一篇:vc++6.0创建console32之.c的应用程序详解


下一篇:VC++6.0 编写插件(图文并茂)