Windows API 概要
前面已经熟悉了 简单的API 应用程序的编写了。
今天要掌握的是,Windows数据类型 。
Windows API 使用了很多 Windows 自己定义的数据类型。读者可能较为熟悉 C 语言或 C++
语言的数据类型。要熟练使用 Windows API 必须要熟悉 Windows 数据类型。这些数据类型是
Windows 特有的。在 SDK 的相关头文件中有定义。
在众多的Windows 数据类型中,最常用的有 DWORD、HANDLE、LPTSTR、WORD、BYTE、 CHAR 等。在 Windows 系统中,DWORD 用于表示无符号整型的数据,意为 double word,32
位。
在一般情况下BYTE 是 8 位的,而WORD 是 16位,DWORD就是 32位的.。示例代码start.cpp
LPSTR szString =TEXT("wumi_liu"); CHAR* lp = TEXT("wumi_liu"); CHAR lpstring[120]; //char DWORD dwMax = 0Xffffffff;//unsigned long DWORD dwOne = 0X1; INT iMax = 0XFFFFFFFF;//int INT iMin = 0X1; MessageBox(NULL,szString,"LPSTR",MB_OK); MessageBox(NULL,lp,"CHAR*",MB_OK); CopyMemory(lpstring,szString,(strlen(szString)+1));//memcpy((Destination),(Source),(Length)) MessageBox(NULL,lpstring,"CHAR[]",MB_OK);
2.最常见的 Windows 数据类型
Windows API 中还会使用到其他很多的Windows 特有的数据类型。常用的类型说明如表:
2.最常见的 Windows 数据类型
Windows API 中还会使用到其他很多的Windows 特有的数据类型。常用的类型说明如表:
Windows 数据类型名命名的规律;
Windows 数据类型的命名都很有规律。
基本数据类型包括 BYTE、CHAR、WORD、SHORT、DOWRD、INT 等。
指针类型的命令方式一般是在其指向的数据类型前加“LP”或“P”,比如指向 DWORD
的指针类型为“LPDWORD”和“PDWORD”。
各种句柄类型的命令方式一般都是在对象名前加“H”。Windows 系统中有很多对象,
所有表示一个对象的数据类型都是句柄,每一种对象都对应着一种句柄类型,比如与位图
( BITMAP)对应的句柄类型为“HBITMAP”,与菜单(MENU)对应的句柄类型为“HMENU”,与
窗口(WINDOW)对应的句柄类型为“HWND”。
无符号类型一般是以“U”开头,比如“INT”是符号类型,“UINT”是无符号类型,
“LONG”是符号类型“ULONG”是无符号类型等
Windows 中的数据结构
Windows API 中的数据结构定义具有一定的特点,如将在第 4 章中使用到的 WIN32_FILE
_ ATTRIBUTE_ DATA 数据结构的定义如下:
typedef struct _WIN32_FILE_ATTRIBUTE_DATA {
DWORD dwFileAttributes;
FILETIME ftCreationTime;
FILETIME ftLastAccessTime;
FILETIME ftLastWriteTime;
DWORD nFileSizeHigh;
DWORD nFileSizeLow;
} WIN32_FILE_ATTRIBUTE_DATA,*LPWIN32_FILE_ATTRIBUTE_DATA;
Windows SDK 中,结构体也有自己的命名规范。一般情况下,Windows 系统中使用全大
写来命名结构体、共用体,并使用“_”来分隔单词,在结构名加“LP”或“P”表示指向数
据结构的指针。
Windows API 的功能分类
Windows API 所能实现的功能包括很多方面,在进行应用程序的开发时,开发人员可能
会使用到文件、进程、内存、权限、系统信息等系统的基本服务和系统管理类的 API,可能
会用到图形用户界面、控件等函数和对象,可能需要在界面上绘制图像处理多媒体信息等,
还包括进行网络通信开发等。
查看 Windows 数据类型的定义可以看到,所有的 Windows 数据类型都是由 C 数据类型经
过类型重定义得到的。如 DWORD 实质上就是 unsigned long 数据类型,32 位的无符号整型
所有的 Windows 数据类型都是通过这种方式在 SDK 的头文件中进行定义的,它们都
是来源于标准 C 的数据类型。
而实际上 VC 编译器是一个完整的 C 编译器,此外并没有过多的扩展。Windows 数据类
型也不是 VC 的内建类型,而从标准 C 类型重定义得到。