实例和显示窗口四个部分。 ①窗口类的定义 在 windows 程序中,窗口类定义了窗口的形式与功能。窗口类定义通过给 窗口类数据结构 WNDCLASS 赋值完成, 该数据结构中包含窗口类的各种属性。 常用函数有: ● LoadIcon 在程序中加载一个窗口图标 其原型为: HICON LoadIcon ( HINSTANCE hInstance, //图标资源所在的模块句柄,为 NULL 则使用系统预定义图标 LPCTSTR lpIconName //图标资源名
或系统预定义图标标识名 ) ● LoadCursor 向程序加载一个窗口光标 其原型为:
HCURSOR LoadCursor ( HINSTANCE hInstance, //光标资源所在的模块句柄,为 NULL 则使用系统预定义图标 LPCTSTR lpCursorName //光标资源名或系统预定义图标标识名 ) ●GetStockObject 可以获取系统提供的背景刷 其原型为: HBRUSH GetStockObject(int nBrush);// nBrush 为系统提供的背景刷的标识名 ②
注册窗口类 Windows 系统本身提供部分预定义的窗口类,程序员也可以自定义窗口类。 窗口类必须先用函数 RegisterClass 进行注册后才能使用。 其形式为: BOOL RegisterClass( &;wndClass );// wndClass 为窗口类结构 ③创建窗口 窗口创建由函数 CreateWindow 实现,其原型为: HWND CreateWinodw ( LPCTSTR lpszClassName, // 窗口类名 LPCTSTR lpszTitile, // 窗口标题 DWORD dwStyle, // 窗口样式 int x, y, // 窗口左上角坐标 int nWidth, int nHeight, // 窗口高宽 HWND hwndParent, // 该窗口父窗口句柄 HMENU hMenu, // 主菜单句柄 HINSTANCE hInstance, // 当前应用程序句柄 LPVOID lpParam // 指向一个传递给窗口参数值的指针 ) ④显示窗口 窗口类显示由 ShowWindow 和 UpdateWindow 函数实现。 ShowWindow 将窗口显示在屏幕上,形式为: BOOL ShowWindow( HWND hwnd, int nCmdShow); 显 示 完 窗 口 后 常 常 使 用 UpdateWindow 更 新 并 绘 制 用 户 区 , 并 发 出 WM_PAINT 消息,形式为 UpdateWindow( HWND hwnd); ⑤消息循环 Windows 应用程序的运行以消息为核心。 Windows 将产生的消息放入应用 程序的消息队列中,而应用程序的 WinMain 函数在消息循环中提取队列中的消 息,并将其传递给窗口函数的相应过程处理。 消息循环常见格式为:
MSG Msg; while (GetMessage ( &;Msg, NULL, 0 , 0 ))
{ TranslateMessage( &; Msg); DispatchMessage( &; Msg); } 其中函数 GetMessage 的作用是从消息队列中读取一条消息,并将消息放在一个 MSG 结构 中。其形式为: GetMessage ( LpMSG, //指向 MSG 结构的指针 hwnd, nMsgFilteMin, //用于消息过滤的最小消息号值 nMsgFilteMax, //用于消息过滤的最大消息号值 )
TranslateMessage 函数负责将消息的虚拟键转换为字符信息,其形式为: TranslateMessage( &; MSG); DispatchMessage 函数负责将参数指向的消息传送到指定的窗口函数,其形式为: DispatchMessage( &; msg); ⑶窗口函数 窗口函数定义了应用程序对接收到的不同消息的响应,其中包括了应用程序 对各种可能收到的消息的处理过程,是消息处理分支控制语句的集合。通常,窗 口函数由一个或多个 switch 语句组成。每一条 case 语句对应一种消息,当应用 程序接收到一个消息时,相应的 case 语句被激活并执行相应的响应程序模块。 窗口函数的一般形式如下:
LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam
, LPRARM lParam) { … swithch (message) { … case WM_DESTROY: PostQuitMessage( 0 ); default : return DefWindowProc(hwnd, message, wParam, lParam); } return 0 ; } PostQuitMessage 函数的原型为: void PostQuitMessage(int nExitCode) // nExitCode 为应用程序退出代码 case … //message 为标识消息的消息步
⑷数据结构 ①WNDCLASS 结构 WNDCLASS 中包含一个消息的全部信息,既是消息发送的格式,也 是 Windows 编程中最基本的数据结构之一。其定义如下