typedef long LONG; // 长整数(32位有符号整数)
typedef unsigned long DWORD; // 双字(32位无符号长整数) // __int64为微软在Visual C++中定义的表示64位整数的C++扩展关键字 typedef __int64 LONGLONG; // 长长整数(64位整数)
typedef unsigned __int64 ULONGLONG; // 无符号长长整数(64位无符号整数)
2.指针与参数类型
typedef unsigned int UINT_PTR; // 无符号整数转换为指针 typedef long LONG_PTR; // 长整数转换为指针 typedef UINT_PTR WPARAM; // 窗口参数 typedef LONG_PTR LPARAM; // 长(整数)参数 typedef LONG_PTR LRESULT; // 长(整数)结果
3.颜色类型
typedef DWORD COLORREF; // 颜色引用0x00bbggrr
4.常量定义
#define NULL 0 // 空指针(C++) #define NULL ((void *)0) //空指针(C)
#define FALSE 0 // 假(标准C++中的对应关键字为false) #define TRUE 1 // 真(标准C++中的对应关键字为true)
5.句柄类型
在Windows API中,还定义了若干作为对象引用的句柄(handle):
typedef void *HANDLE; // 句柄(通用指针,一般为一个DWORD值) HANDLE // 对象句柄 HBITMAP // 位图句柄 HBRUSH // 刷句柄
31
HCURSOR // 光标句柄
HDC // DC(device context,设备上下文)句柄 HFILE // 文件句柄 HFONT // 字体句柄 HGLOBAL // 全局内存块句柄 HICON // 图标句柄 HINSTANCE // 实例句柄 HLOCAL // 局部内存块句柄 HMENU // 菜单句柄
2.3.2 函数与数据结构
Windows API函数可分为如下5类:窗口管理、GDI、系统服务、国际特性和网络服务。 下面是几个最基本的API函数和结构:
1.入口函数
int WINAPI WinMain(
HINSTANCE hInstance, // 当前实例的句柄 HINSTANCE hPrevInstance, // 先前实例的句柄 LPSTR lpCmdLine, // 命令行指针 int nCmdShow // 窗口的显示状态 );
2.窗口类结构
typedef struct _WNDCLASS { UINT style; // 窗口类风格
WNDPROC lpfnWndProc; // 窗口过程函数的长指针
int cbClsExtra; // 窗口类结构后的额外字节数(被系统初始化为0) int cbWndExtra; // 窗口实例后的额外字节数(被系统初始化为0) HANDLE hInstance; // 含有此类窗口过程的实例句柄
32
HICON hIcon; // 窗口类图标句柄(为NULL时系统会提供一个默认图标) HCURSOR hCursor; // 窗口类光标句柄 HBRUSH hbrBackground; // 窗口类背景刷句柄
LPCTSTR lpszMenuName; // 窗口类菜单的资源名串
// 可用MAKEINTRESOURCE宏转换菜单ID后来替代
LPCTSTR lpszClassName; // 窗口的类名(用RegisterClass注册) } WNDCLASS;
其中,ID(identifier,标识符)是一种代表资源的整型常数(如IDR_MAINFRAME),一般被(自动)定义在资源头文件Resource.h中(如#define IDR_MAINFRAME 128)。
3.注册窗口类函数
ATOM RegisterClass(
CONST WNDCLASS *lpWndClass // 含窗口类数据的结构地址 );
4.装入图标、光标和库存对象的函数
HICON LoadIcon( // 装入图标
HINSTANCE hInstance, // 应用程序实例句柄 LPCTSTR lpIconName // 图标名串或图标资源ID );
HCURSOR LoadCursor( // 装入光标
HINSTANCE hInstance, // 应用程序实例句柄 LPCTSTR lpCursorName // 光标的名串或资源标识符 );
HGDIOBJ GetStockObject( // 装入库存对象 int fnObject // 库存对象的类型 );
33
5.窗口创建函数
HWND CreateWindow(
LPCTSTR lpClassName, // 注册过的类名串的指针 LPCTSTR lpWindowName, // 窗口名串的指针 DWORD dwStyle, // 窗口风格 int x, // 窗口左上角的水平位置 int y, // 窗口左上角的垂直位置 int nWidth, // 窗口的宽度 int nHeight, // 窗口的高度
HWND hWndParent, // 父窗口或属主窗口的句柄 HMENU hMenu, // 菜单或子窗口标识符的句柄 HANDLE hInstance, // 应用程序实例句柄 LPVOID lpParam // 窗口创建数据的指针 );
6.显示与刷新窗口的函数
BOOL ShowWindow( // 显示窗口 HWND hWnd, // 窗口句柄
int nCmdShow // 窗口的显示状态 );
BOOL UpdateWindow( // 刷新窗口 HWND hWnd // 窗口句柄 );
7.过程函数
下面是消息处理的自定义与默认过程函数:
LRESULT CALLBACK WindowProc( // 消息处理的自定义过程函数 HWND hWnd, // 窗口句柄
34
UINT uMsg, // 消息标识符
WPARAM wParam, // 第一个消息参数 LPARAM lParam // 第二个消息参数 );
LRESULT DefWindowProc( // 消息处理的默认过程函数 HWND hWnd, // 窗口句柄 UINT uMsg, // 消息标识符
WPARAM wParam, // 第一个消息参数 LPARAM lParam // 第二个消息参数 );
8.消息结构
typedef struct tagMSG { HWND hWnd, // 接受消息的窗口句柄 UINT message, // 消息数
WPARAM wParam, // 第一个消息参数 LPARAM lParam // 第二个消息参数 DWORD time; // 消息发送的时间
POINT pt; // 消息发送时的光标位置(屏幕坐标) } MSG;
9.消息的获取、转换和传送函数
BOOL GetMessage( // 获取消息 LPMSG lpMsg, // 消息结构的地址 HWND hWnd, // 窗口句柄
UINT wMsgFilterMin, // 第一个消息参数 UINT wMsgFilterMax // 最后第一个消息参数 );
BOOL TranslateMessage( // 转换消息(将虚拟键翻译成字符)
35