基于SDK的Windows应用程序框架代码需要注意以下几个方面:
1、必须包含头文件windows.h
WINDOWS.H是一个最重要的头文件,它包含了其他Windows头文件,这些头文件的某些也包含了其他头文件。这些头文件中最重要的和最基本的是:
WINDEF.H 基本数据类型定义。
WINNT.H 支持Unicode的类型定义。
WINBASE.H Kernel(内核)函数。
WINUSER.H 用户界面函数。
WINGDI.H 图形设备接口函数。
这些头文件定义了Windows的所有资料型态、函数调用、资料结构和常数识别字,它们是Windows文件中的一个重要部分。
其实,远不止这些,我们可以打开该文件看一看,如果vc++6.0安装在C盘,那么我们可以在C:\Program Files\Microsoft Visual Studio\VC98\Include目录下打开该文件。当然WINDEF.H等文件也在这个目录下。这个目录下几乎包含了windows开发的所有的头文件。比如网络通信程序开发时所用的WINSOCK.H头文件等。
2、声明窗口过程函数
窗口过程函数声明如下:
LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;
LRESULT 看上去很奇怪。
其实LRESULT 是在WINDEF.H中定义的,可以在VC++6.0用鼠标选择LRESULT 然后点鼠标右键,查看其定义,定义如下:
typedef LONG LRESULT;
L 的意思是LONG RESULT 的意思是结果、返回值。加在一起就是返回长整型的意思。
注意:typedef LONG LRESULT; 并不是创建了另一个数据类型,只是给 LONG类型定义了另一个别名。其实,我们会发觉在C或C++中也没有一种数据类型为LONG,只有long类型。如果我们继续用上面提到的方法查看LONG类型的定义,我们会发觉LONG在WINNT.H文件中定义为:
typedef long LONG;
所以,所谓的LRESULT 其实就是long类型。只是他还有另一个名字叫LRESULT。
Windows应用程序为我们定义了很多的这样的数据类型别名。
下面我们详细的介绍一下windows的常用数据类型。
我们查看WINDEF.H文件,可以看到windows为我们定义的一些常用的数据类型及常量如下:
typedef unsigned long DWORD;
typedef int BOOL;
typedef unsigned char BYTE;
typedef unsigned short WORD;
typedef float FLOAT;
typedef FLOAT *PFLOAT;
typedef int INT;
typedef unsigned int UINT;
typedef unsigned int *PUINT;
typedef UINT WPARAM;
typedef LONG LPARAM;
typedef LONG LRESULT;
#define MAKEWORD(a, b) ((WORD)(((BYTE)(a)) | ((WORD)((BYTE)(b))) << 8))
#define MAKELONG(a, b) ((LONG)(((WORD)(a)) | ((DWORD)((WORD)(b))) << 16))
#define LOWORD(l) ((WORD)(l))
#define HIWORD(l) ((WORD)(((DWORD)(l) >> 16) & 0xFFFF))
#define LOBYTE(w) ((BYTE)(w))
#define HIBYTE(w) ((BYTE)(((WORD)(w) >> 8) & 0xFF))
可以看到DWORD其实就是一个无符号的长整型的别名,所占内存为4个字节;
typedef int BOOL;
BOOL型其实就是int的别名。所占内存为4个字节。
typedef float FLOAT;
FLOAT 就是float类型的别名。请注意:BOOL 与 bool之间的区别,bool为布尔类型,所占内存只有一个字节。再看一个定义:
typedef FLOAT *PFLOAT;
有点奇怪吧!我们把它的写的格式变一下:
typedef FLOAT * PFLOAT;
我们发觉PFLOAT 就是FLOAT * 即 float * 也就是浮点数指针。
也就是凡是以字母”P“开头的表示他是一个指针类型。