按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!
当使用者的一个鼠标动作可能引发许多许多程序绘图动作时,绘图效率就变得非常重
要。因此在考量如何加强显示能力时,我们就得设计所谓的「必要绘图区」,也就是
所谓的Invalidate Region (不再适用的区域)。事实上每当使用者开始绘图(增加新
的线条),程序可以设定「必要绘图区」为:该线条之最小外围四方形。为了记录这
项数据,Step1 所设计并延续至今的Document 数据结构必须改变。
Step1 的View 窗口有一个缺点:没有滚动条。新版本加上了垂直和水平滚动条,此外它
也示范一种所谓的分裂窗口(Splitter )。
■ Scribble Step5-打印与预视(第12 章):Step1 已有打印和预视能力,这当然
归功于CScribbleView::OnDraw。现在要加强的是更细致的打印能力,包括表
37
…………………………………………………………Page 60……………………………………………………………
深入湷觥 FC
头、表尾、页码、映射模式等等。坐标系统(也就是映射模式,Mapping Mode )
的选择,关系到是否能够「所见即所得」。为了这个目的,必须使用能够反应
真实世界之尺寸(如英寸、公分)的映像模式,本例使用 MM_LOENGLISH,
每个逻辑单位0。01 英寸。
我们也在此版中学习如何设定文件的大小。有了大小,才能够在打印时做分页动作。
■ Graph 范例程序(第13 章):这个程序示范如何在静态分裂窗口的不同窗口中,
以不同的方式(本例为长条图、点状图和文字形式)显示同一份资料。
■ Text 范例程序(第13 章):这个程序示范如何在同一份Document 的各个「同
源view 窗口」中,以不同的显示方法表现同一份资料,做到一体数面。
■ Graph2 范例程序(第13 章):这个程序示范如何为程序加上第二个Document
类型。其间关系到新的Document ,新的View ,新的UI 。
■ MltiThrd 范例程序(第14 章):这是第1章的同名程序的MFC 版。我只示
范MFC 多线程程序的架构,原Mltithrd 程序的绘图部份留给读者练习。
■ Top 范例程序(第15 章):示范如何量身定做一个属于自己的AppWizard 。
我的这个Top Studio AppWizard 架在系统的MFC AppWizard 之上,增加一个
开发步骤,询问程序员名称及其简单声明,然后就会在每一个产生出来的原始
码文件最前端加上一段固定格式的说明文字。
■ Test 范例程序(第16 章):此程序示范使用ponent Gallery 中的三
个ponents :Splash Screen、SysInfo、Tip Of The Day 。
■ OcxTest 范例程序(第16 章):此程序示范使用ponent Gallery 中的Grid
ActiveX control 。
38
…………………………………………………………Page 61……………………………………………………………
第0章 你定要知道(導讀)
与前版本之差异
深入浅出MFC 第二版与前一版本之重大差异在于:
1。 软件工具由Visual C++ 4。0 改为Visual C++ 5。0 ,影响所及,第4章「Visual C++
整合性软件开发环境」之内容改变极大。全书之中有关于MFC 内部动作逻
辑及其源代码的变动不多,因为Visual C++ 5。0 中的MFC 版本还维持在4。2 。
2。 第1章增加Console 程序设计,以及Win32 多线程程序实例Mltithrd 。
3。 第2章增加「四种不同的对象生存方式」一节。
4。 第3章去除原有之Frame5 程序(该程序以MFC 2。5 的技术仿真Dynamic
Creation )。
5。 第4章全部改为Visual C++ 5。0 使用画面,并在最后增加一节「Console 程序
的项目管理」。
6。 第6章增加「奇怪的窗口类别名称Afx:x:y:z:w 」一节,以及增加Hello 程序
对idle time 的处理。
7。 增加14~16 三章。
8。 附录A增加 的「MFC 四大天王」一文。
9。 附录D由原先之「OWL 程序设计一览」,改为「以MFC 重建DBWIN 」。
本书第一版之Scribble 程序自step1 (加了CStroke)之后,即无法在Visual C++ 4。2 和
Visual C++ 5。0 上顺利编译。原因出在VC++ 4。2 和VC++ 5。0 似乎未能支持〃forward
declaration of data structure class〃 (但是我怀疑VC++ 怎么会走退步?是不是有什么选项
可以设定)。无论如何,只要将CStroke 的声明搬移到SCRIBBLEDOC。H 的最前面,
然后再接续CScribbleDoc 的声明,即可顺利编译。请阅读本书第8章「CScribbleDoc 的
修改」一节之中于SCRIBBLEDOC。H 源代码列表后的一段说明(#477 页)。
39
…………………………………………………………Page 62……………………………………………………………
深入湷觥 FC
如何联络作者
我非常乐意和本书的所有读者沟通,接受您对本书以及对我的指正和建议。请将沟通内
容局限在对书籍、对知识的看法,以及对本书误谬之指正和建议上面,请勿要求我为您
解决技术问题(例如您的程序臭虫或您的项目瓶颈)。如果只是单纯地想和我交个朋友
聊聊天,我更倍感荣幸。
我的Email 地址是jjhou@ccca。nctu。edu。tw
我的永久通讯址是新竹市建中一路39 号13 楼之二(FAX :03…5733976 )
40
…………………………………………………………Page 63……………………………………………………………
1
勿在浮砂筑高台
深入湷觥FC
2nd Edition
1
…………………………………………………………Page 64……………………………………………………………
第篇 勿在浮砂築高台
2
…………………………………………………………Page 65……………………………………………………………
第 1章
Win32 基本程序观念
程序设计领域里,每一个人都想飞。
但是,还没学会走之前,连跑都别想!
虽然这是一本深入讲解MFC 程序设计的书,我仍坚持要安排这第一章,介绍Win32 的
基本程序设计原理(也就是所谓的SDK 程序设计原理)。
event driven message based
从来不曾学习过在「事件驱动( )系统」中撰写「以消息为基础( )
之应用程序」者,能否一步跨入MFC 领域,直接以application framework 开发Windows
MFC application framework
程序,我一直抱持怀疑的态度。虽然有了 (或任何其它的 ),
你可以继承一整组类别,从而快速得到一个颇具规模的程序,但是Windows 程序的运作
本质(Message Based,Event Driven )从来不曾也不会改变。如果你不能了解其髓,空有
其皮其肉或其骨,是不可能有所精进的,即使能够操控wizard ,充其量却也只是个puppet ,
对于手上的程序代码,没有自主权。
我认为学习MFC 之前,必要的基础是,对于Windows 程序的事件驱动特性的了解(包
括消息的产生、获得、分派、判断、处理),以及对C++ 多态(polymorphism )的精确
体会。本章所提出的,是我对第一项必要基础的探讨,你可以从中获得关于Windows 程
序的诞生与死亡,以及多任务环境下程序之间共存的观念。至于第二项基础,将由第二章
为你夯实。
3
…………………………………………………………Page 66……………………………………………………………
让我再强调一遍,本章就是我认为Windows 程序设计者一定要知道的基础知识。一个
连这些基础都不清楚的人,不能要求自己冒冒然就开始用Visual C++ 、用MFC、用对象
导向的方式去设计一个你根本就不懂其运作原理的程序。
还没学会走之前,不要跑!
Dialog Editor Image Editor Font Editor
。DLG 。BMP 。ICO 。CUR 。FON
。BMP 。ICO 。CUR 。FON
。C 。H 。RC RC piler
C piler 。RES
。RES
。DEF
CvtRes
。OBJ
。OBJ
tool RBJ
RBJ
。LIB
。LIB
text file
C runtime; 曾经有的