按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!
{
LONG x;
LONG y;
} POINT; *PPOINT; NEAR *NPPOINT; FAR *LPPOINT;
typedef struct tagSIZE
{
LONG cx;
LONG cy;
} SIZE; *PSIZE; *LPSIZE;
340
…………………………………………………………Page 403……………………………………………………………
第5章 總觀Application Framework
341
…………………………………………………………Page 404……………………………………………………………
第篇 湷觥 FC 程式設計
342
…………………………………………………………Page 405……………………………………………………………
第6章 MFC 程式的生死因果
第6章 MFC 程序设计导论
MFC 程序的生死因果
理想如果不向实际做点妥协,理想就会归于尘土。
中华民国还得十次革命才得建立,对象导向怎能把一切传统都抛开。
以传统的C/SDK 撰写Windows 程序,最大的好处是可以清楚看见整个程序的来龙去脉
和消息动向,然而这些重要的动线在MFC 应用程序中却隐晦不明,因为它们被
Application Framework 包起来了。这一章主要目的除了解释MFC 应用程序的长像,也
要从MFC 源代码中检验出一个Windows 程序原本该有的程序进入点(WinMain)、视
窗类别注册(RegisterClass )、窗口产生(CreateWindow)、消息循环(Message Loop )、
窗口函数(Window Procedure )等等动作,抽丝剥茧彻底了解一个MFC 程序的诞生与
结束,以及生命过程。
为什么要安排这一章?了解MFC 内部构造是必要的吗?看电视需要知道映射管的原理
吗?开汽车需要知道传动轴与变速箱的原理吗?学习MFC 不就是要一举超越烦琐的
Windows API ?啊,厂商(不管是哪一家)广告给我们的印象就是,藉由可视化的工具我
们可以一步登天,基本上这个论点正确,只是有个但书:你得学会操控Application
Framework 。
想象你拥有一部保时捷,风驰电挚风光得很,但是引擎盖打开来全傻了眼。如果你懂汽
车内部运作原理,那么至少开车时「脚不要老是含着离合器,以免来令片磨损」这个道
理背后的原理你就懂了,「踩煞车时绝不可以同时踩离合器,以免失去引擎煞车力」这
个道理背后的原理你也懂了,甚至你的保时捷要保养维修时或也可以不假外力自己来。
343
…………………………………………………………Page 406……………………………………………………………
第篇 湷觥 FC 程式設計
不要把自己想象成这场游戏中的后座车主,事实上作为这本技术书籍的读者的你,应该
是车厂师傅。
好,这个比喻不见得面面俱到,但起码你知道了自己的身份。
题外话:我的朋友曾铭源(现在纽约工作)写信给我说:『最近项目的压力大,人员纷
纷离职。接连一个多礼拜,天天有人上门面谈。人事部门不知从哪里找来这些阿哥,号
称有三年的SDK/MFC 经验,结果对起话来是鸡同鸭讲,WinMain 和Windows Procedure
都搞不清楚。问他什么是message handler ?只会在ClassWizard 上click、click、click !!! 拜
Wizard 之赐,人力市场上多出了好几倍的VC/MFC 程序员,但这些「Wizard 通」我们
可不敢要』。
以raw Windows API 开发程序,学习的
路径是单纯的,条理分明的,你一定先 》
从程序进入点开始,然后产生窗口类 various Windows APIs 。。。
别,然后产生窗口,然后取得消息,然
Window Procedure
后分辨消息,然后决定如何处理消息。
虽然动作繁琐,学习却容易。
GetMessage/DispatchMessage
CreateWindow
RegisterClass
WinMain
344
…………………………………………………………Page 407……………………………………………………………
第6章 MFC 程式的生死因果
开发程序,一开始很快速,因为 》
以MFC
开发工具会为你产生一个骨干程序,一
CObject
近
般该有的各种接口一应俱全。但是MFC CCmdTarget
乎 CWinThread
的学习曲线十分陡峭,程序员从骨干程
垂 CWinApp
式出发一直到有能力修改程序代码以符合 直 CMyWinApp
的 CWnd
个人的需要,是一段不易攀登的峭壁。 CView
学
习 CMyView
曲 CFrameWnd
一个 MFC 骨干程序 线 CMyFrameWnd
CDocument
Visual C++ 各种工具之使用 CMyDoc
》
Dynamic Creation;
Serialization。
Message Mapping;
如果我们了解 Windows程序的基本运作原理 Message Routing。
;并了解 MFC 如何把这些基础动作整合起来 Windows APIs
包装在MFC 各类别中
;我们就能够使 MFC 学习曲线的陡峭程度缓 Window Procedure 由 MFC 提供
和下来。因此能够迅速接受MFC,进而使用 GetMessage/DispatchMessage
包裝在 CWinApp::Run 中
MFC。呵,一条似远实近的道路!
CreateWindow 应该在 CWinApp::InitInstance 中调用
RegisterClass AfxWinInit 中
包装于
MFC 骨干程序 WinMain 由 MFC 提供
Visual C++ 各种工具之使用
345
一个
…………………………………………………………Page 408……………………………………………………………
第篇 湷觥 FC 程式設計
我希望你了解,本书之所以在各个主题中不厌其烦地挖MFC 内部动作,解释骨干程序
的每一条指令,每一个环节,是为了让你踏实地接受MFC ,进而有能力役使MFC 。你
以为这是一条远路?呵呵,似远实近!
不二法门:熟记MFC 类别的阶层架构
MFC 在1。0 版时期的诉求是「一组将SDK API 包装得更好用的类别库」,从2。0 版
开始更进一步诉求是一个「Application Framework 」,拥有重要的Document…View 架构;
随后又在更新版本上增加了OLE 架构、DAO 架构。。。。为了让你有一个最轻松的起点,