《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简明教程》即VC++ 6.0入门精讲 学习进度及笔记的更多相关文章
- 2013 duilib入门简明教程 -- 总结 (20)
duilib的入门系列就到尾声了,再次提醒下,Alberl用的duilib版本是SVN上第个版本,时间是2013.08.15~ 这里给出Alberl最后汇总的一个工程,戳我下载,效 ...
- DUILIB入门简明教程
电子书下载: DUILIB入门简明教程.chm 文章作者: Alberl 电子书制作: 邓学彬 目录: 2013 duilib入门简明教程 -- 前言(1) 2013 duilib入门简明教程 ...
- Vbs 脚本编程简明教程之一
—为什么要使用 Vbs ? 在 Windows 中,学习计算机操作也许很简单,但是很多计算机工作是重复性劳动,例如你每周也许需要对一些计算机文件进行复制.粘贴.改名.删除,也许你每天启动 计算机第一件 ...
- 2013 duilib入门简明教程 -- 部分bug (11)
一.WindowImplBase的bug 在第8个教程[2013 duilib入门简明教程 -- 完整的自绘标题栏(8)]中,可以发现窗口最大化之后有两个问题, 1.最大化按钮的样式 ...
- 2013 duilib入门简明教程 -- 自绘控件 (15)
在[2013 duilib入门简明教程 -- 复杂控件介绍 (13)]中虽然介绍了界面设计器上的所有控件,但是还有一些控件并没有被放到界面设计器上,还有一些常用控件duilib并没有提供(比如 ...
- 2013 duilib入门简明教程 -- FAQ (19)
虽然前面的教程几乎把所有的知识点都罗列了,但是有很多问题经常在群里出现,所以这里再次整理一下. 需要注意的是,在下面的问题中,除了加上XML属性外,主窗口必须继承自WindowImpl ...
- Mac安装Windows 10的简明教程
每次在Mac上安装Windows都是一件非常痛苦的事情,曾经为了装Win8把整台Mac的硬盘数据都弄丢了,最后通过龟速系统恢复模式恢复了MacOSX(50M电信光纤下载了3天才把系统下载完),相信和我 ...
- Docker简明教程
Docker简明教程 [编者的话]使用Docker来写代码更高效并能有效提升自己的技能.Docker能打包你的开发环境,消除包的依赖冲突,并通过集装箱式的应用来减少开发时间和学习时间. Docker作 ...
- Java8简明教程(转载)
ImportNew注:有兴趣第一时间学习Java 8的Java开发者,欢迎围观<征集参与Java 8原创系列文章作者>. 以下是<Java 8简明教程>的正文. “Java并没 ...
随机推荐
- OpenCV Manager package was not found
http://www.tuicool.com/articles/322Yj2 !! [1]的底部就有解决办法,一般“\OpenCV-2.4.6-android-sdk\apk”这个路径下就是 Open ...
- ajax练习四留言板
留言界面 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3 ...
- svn服务器及客户端安装使用
一.服务器安装: 1.yum install subversion 2.输入rpm -ql subversion查看安装位置,如下图: 我们知道svn在bin目录下生成了几个二进制文件. 输入 ...
- 《Linux内核设计与实现》读书笔记(七)- 中断处理【转】
转自:http://www.cnblogs.com/wang_yb/archive/2013/04/19/3030345.html 中断处理一般不是纯软件来实现的,需要硬件的支持.通过对中断的学习有助 ...
- 由反汇编C程序来理解计算机是如何工作的
C语言代码 int g(int x) { return x + 109; } int f(int x) { return g(x); } int main() { return f(122) + 3; ...
- 数组工具类 - ArrayUtil.java
数组工具类,提供数组.对象之间转换的方法. 源码如下:(点击下载 - ArrayUtil.java .commons-lang-2.6.jar) import java.lang.reflect.Ar ...
- C#判断字符串为空的几种方法和效率判断
C#判断字符串为空的几种方法和效率判断 string定义 1.1 string str1="":会定义指针(栈),并在内存里划一块值为空的存储空间(堆),指针指向这个空间.1.2 ...
- 嵌入式linux内核是什么?
linux内核是一种可以被内核动态加载(insmode)和卸载(rmmod)的可执行二进制代码 最简单的内核 #include <linux/module.h> #include < ...
- Qt之等待提示框(QMovie)
简述 关于gif的使用在实际项目中我用的并不多,因为我感觉瑕疵挺多的,很多时候锯齿比较严重,当然与图存在很大的关系. 关于生成gif的方法可以提供一个网站preloaders,基本是可以满足需求的. ...
- Trianglify – 五彩缤纷的 SVG 背景图案
Trianglify 是一个能够生成五颜六色的三角形图案的 JavaScript 库,可以用来作为 SVG 图像和 CSS 背景.它的灵感来自于 Btmills 的 Geopattern,并使用 d3 ...