按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!
MFC 针对上述这些机能,准备了一些宏,让程序能够很方便地继承并实作出上述四大
机能。这些宏包括:
宏名称 提供机能 出现章节
DECLARE_DYNAMIC 执行时期类别信息 第3章、第8章
IMPLEMENT_DYNAMIC 执行时期类别信息 第3章、第8章
DECLARE_DYNCREATE 动态生成 第3章、第8章
IMPLEMENT_DYNCREATE 动态生成 第3章、第8章
DECLARE_SERIAL 对象内容的文件读写 第3章、第8章
IMPLEMENT_SERIAL 对象内容的文件读写 第3章、第8章
DECLARE_OLECREATE OLE 对象的动态生成 不在本书范围之内
IMPLEMENT_OLECREATE OLE 对象的动态生成 不在本书范围之内
336
…………………………………………………………Page 399……………………………………………………………
第5章 總觀Application Framework
我也已经在第3章提过MFC 的消息映射(Message Mapping)与命令绕行(mand
Routing)两个特性。这两个性质系由以下这些MFC 宏完成:
宏名称 提供机能 出现章节
DECLARE_MESSAGE_MAP 声明消息映射表数据结构 第3章、第9章
BEGIN_MESSAGE_MAP 开始消息映射表的建置 第3章、第9章
ON_MAND 增加消息映射表中的项目 第3章、第9章
ON_CONTROL 增加消息映射表中的项目 本书未举例
ON_MESSAGE 增加消息映射表中的项目 ???
ON_OLECMD 增加消息映射表中的项目 本书未举例
ON_REGISTERED_MESSAGE 增加消息映射表中的项目 本书未举例
ON_REGISTERED_THREAD_ 增加消息映射表中的项目 本书未举例
MESSAGE
ON_THREAD_MESSAGE 增加消息映射表中的项目 本书未举例
ON_UPDATE_MAND_UI 增加消息映射表中的项目 第3章、第9章
END_MESSAGE_MAP 结束消息映射表的建置 第3章、第9章
事实上,与其它MFC Programming 书籍相比较,本书最大的一个特色就是,要把上述
这些MFC 宏的来龙去脉交待得非常清楚。我认为这对于撰写MFC 程序是非常重要
的一件事。
337
…………………………………………………………Page 400……………………………………………………………
第篇 湷觥 FC 程式設計
MFC 数据类型 (data types)
下面所列的这些数据类型,常常出现在MFC 之中。其中的绝大部份都和一般的Win32
程序(SDK 程序)所用的相同。
下面这些是和Win32 程序(SDK 程序)共同使用的数据类型:
数据类型 意义
BOOL Boolean 值(布尔值,不是TRUE 就是FALSE )
BSTR 32…bit 字符指针
BYTE 8…bit 整数,未带正负号
COLORREF 32…bit 数值,代表一个颜色值
DWORD 32…bit 整数,未带正负号
LONG 32…bit 整数,带正负号
LPARAM 32…bit 数值,做为窗口函数或callback 函数的一个参数
LPCSTR 32…bit 指针,指向一个常数字符串
LPSTR 32…bit 指针,指向一个字符串
LPCTSTR 32…bit 指针,指向一个常数字符串。此字符串可移植到Unicode 和DBCS (双
字节字集)
LPTSTR 32…bit 指针,指向一个字符串。此字符串可移植到Unicode 和DBCS (双位
组字集)
LPVOID 32…bit 指针,指向一个未指定类型的资料
LPRESULT 32…bit 数值,做为窗口函数或callback 函数的回返值
UINT 在Win16 中是一个16…bit 未带正负号整数,在Win32 中是一个32…bit
未带正负号整数。
WNDPROC 32…bit 指针,指向一个窗口函数
WORD 16…bit 整数,未带正负号
WPARAM 窗口函数的callback 函数的一个参数。在Win16 中是16 bits,在Win32
中是32 bits 。
338
…………………………………………………………Page 401……………………………………………………………
第5章 總觀Application Framework
下面这些是MFC 独特的数据类型:
数据类型 意义
POSITION 一个数值,代表collection 对象(例如数组或串行)中的元素位置。常使用
于MFC collection classes 。
LPCRECT 32…bit 指针,指向一个不变的RECT 结构。
前面所说那些MFC 数据类型与C++ 语言数据类型之间的对应,定义于WINDEF。H
中。我列出其中一部份,并且将不符合(_MSC_VER 》= 800) 条件式的部份略去。
#define NULL 0
#define far //侯俊杰注:Win32 不再有far 或near memory model,
#define near // 而是使用所谓的flat model。pascall 函数调用习惯
#define pascal __stdcall //也被stdcall 函数调用习惯取而代之。
#define cdecl _cdecl
#define CDECL _cdecl
、
#define CALLBACK __stdcall // 侯俊杰注:在Windows programming 演化过程中
#define WINAPI __stdcall // 曾经出现的PASCAL、CALLBACK、WINAPI
#define WINAPIV __cdecl //
APIENTRY,现在都代表相同的意义,就是stdcall
#define APIENTRY WINAPI // 函数调用习惯。
#define APIPRIVATE __stdcall
#define PASCAL __stdcall
#define FAR far
#define NEAR near
#define CONST const
typedef unsigned long DWORD;
typedef int BOOL;
typedef unsigned char BYTE;
typedef unsigned short WORD;
typedef float FLOAT;
typedef FLOAT *PFLOAT;
typedef BOOL near *PBOOL;
typedef BOOL far *LPBOOL;
typedef BYTE near *PBYTE;
typedef BYTE far *LPBYTE;
339
…………………………………………………………Page 402……………………………………………………………
第篇 湷觥 FC 程式設計
typedef int near *PINT;
typedef int far *LPINT;
typedef WORD near *PWORD;
typedef WORD far *LPWORD;
typedef long far *LPLONG;
typedef DWORD near *PDWORD;
typedef DWORD far *LPDWORD;
typedef void far *LPVOID;
typedef CONST void far *LPCVOID;
typedef int INT;
typedef unsigned int UINT;
typedef unsigned int *PUINT;
/* Types use for passing & returning polymorphic values */
typedef UINT WPARAM;
typedef LONG LPARAM;
typedef LONG LRESULT;
typedef DWORD COLORREF;
typedef DWORD *LPCOLORREF;
typedef struct tagRECT
{
LONG left;
LONG top;
LONG right;
LONG bottom;
} RECT; *PRECT; NEAR *NPRECT; FAR *LPRECT;
typedef const RECT FAR* LPCRECT;
typedef struct tagPOINT
{
LONG x;
L