按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!
文件名称 文件大小 说明
( )的
MFC42。LIB 4200034 MFC42。DLL 941840 bytes import 函数库。
( )的
MFC42D。LIB 3003766 MFC42D。DLL 1393152 bytes import 函数库。
MFCS42。LIB 168364
MFCS42D。LIB 169284
MFCN42D。LIB 91134
MFCD42D。LIB 486334
MFCO42D。LIB 2173082
。。。
我们如何在联结器(link。exe ) 中设定选项,把这些函数库都联结起来? 稍后在
HELLO。MAK 中可以一窥全貌。
如果在Visual C++ 整合环境中工作,这些设定不劳你自己动手,整合环境会根据我们圈
选的项目自动做出一个合适的makefile 。这些makefile 的内容看起来非常诘屈聱牙,事
实上我们也不必太在意它,因为那是整合环境的工作。这一章我不打算依赖任何开发工
具,一切自己来,你会在稍后看到一个简洁清爽的makefile 。
348
…………………………………………………………Page 411……………………………………………………………
第6章 MFC 程式的生死因果
需要什么头文件?
SDK 程序只要包含WINDOWS。H 就好,所有API 的函数声明、消息定义、常数定义、
宏定义、都在WINDOWS。H 档中。除非程序另调用了操作系统提供的新模块(如
mDlg、ToolHelp 、DDEML。。。 ),才需要再各别包含对应的。H 档。
WINDOWS。H 过去是一个巨大文件,大约在5000 行上下。现在已拆分内容为数十个较小
的。H 档,再由WINDOWS。H 包含进来。也就是说它变成一个〃Master included file for
Windows applications〃 。
MFC 程序不这么单纯,下面是它常常需要面对的另外一些。H 档:
■
STDAFX。H 这个文件用来做为Prepiled header file (请看稍后的方块说
明),其内只是包含其它的MFC 头文件。应用程序通常会准备自己的
■ STDAFX。H,例如本章的Hello 程序就在STDAFX。H 中包含AFXWIN。H 。
AFXWIN。H 每一个Windows MFC 程序都必须包含它,因为它以及它所包含
■
的文件声明了所有的MFC 类别。此档内含AFX。H ,后者又包含AFXVER_。H ,
后者又包含AFXV_W32。H ,后者又包含WINDOWS。H (啊呼,终于现身)。
■
AFXEXT。H 凡使用工具栏、状态列之程序必须包含这个文件。
■
AFXDLGS。H 凡使用通用型对话框(mon Dialog)之MFC 程序需包含此
档,其内部包含MDLG。H 。
AFXCMN。H 凡使用Windows 95 新增之通用型控制组件(mon Control )
■
之MFC 程序需包含此文件。
AFXCOLL。H 凡使用Collections Classes (用以处理数据结构如数组、串行)
■
之程序必须包含此文件。
■
AFXDLLX。H 凡MFC extension DLLs 均需包含此档。
AFXRES。H MFC 程序的RC 文件必须包含此档。MFC 对于标准资源(例如
■
File、Edit 等菜单项目)的ID 都有默认值,定义于此文件中,例如:
349
…………………………………………………………Page 412……………………………………………………………
第篇 湷觥 FC 程式設計
// File mands
#define ID_FILE_NEW 0xE100
#define ID_FILE_OPEN 0xE101
#define ID_FILE_CLOSE 0xE102
#define ID_FILE_SAVE 0xE103
#define ID_FILE_SAVE_AS 0xE104
。。。
// Edit mands
#define ID_EDIT_COPY 0xE122
#define ID_EDIT_CUT 0xE123
。。。
这些菜单项目都有预设的说明文字(将出现在状态列中),但说明文字并不会事先定义
于此文件,AppWizard 为我们制作骨干程序时才把说明文字加到应用程序的RC 文件中。第
4章的骨干程序Scribble step0 的RC 档中就有这样的字符串表格:
STRINGTABLE DISCARDABLE
BEGIN
ID_FILE_NEW 〃Create a new document〃
ID_FILE_OPEN 〃Open an existing document〃
ID_FILE_CLOSE 〃Close the active document〃
ID_FILE_SAVE 〃Save the active document〃
ID_FILE_SAVE_AS 〃Save the active document with a new name〃
。。。
ID_EDIT_COPY 〃Copy the selection and puts it on the Clipboard〃
ID_EDIT_CUT 〃Cut the selection and puts it on the Clipboard〃
。。。
END
所有MFC 头文件均置于MSVCMFCINCLUDE 中。这些文件连同Windows SDK 的
包含档WINDOWS。H 、MDLG。H 、TOOLHELP。H 、DDEML。H。。。 每每在编译过程中
耗费大量的时间,因此你绝对有必要设定Prepiled header 。
350
…………………………………………………………Page 413……………………………………………………………
第6章 MFC 程式的生死因果
Prepiled Header
一个应用程序在发展过程中常需要不断地编译。Windows 程序包含的标准。H 文件
非常巨大但内容不变,编译器浪费在这上面的时间非常多。Prepiled header 就是
将。H 档第一次编译后的结果贮存起来,第二次再编译时就可以直接从磁盘中取出
来用。这种观念在Borland C/C++ 早已行之,Microsoft 这边则是一直到Visual C++
1。0 才具备。
简化的MFC 程序架构-以Hello MFC 为例
现在我们正式进入MFC 程序设计。由于Document/View 架构复杂,不适合初学者,所
以我先把它略去。这里所提的程序观念是一般的MFC Application Framework 的子集合。
本章程序名为Hello,执行时会在窗口中从天而降〃Hello; MFC〃 字样。Hello 是一个非
常简单而具代表性的程序,它的代表性在于:
■ 每一个MFC 程序都想从MFC 中衍生出适当的类别来用( 不然又何必以
MFC 写程序呢),其中两个不可或缺的