第十二章 Windows程序设计初步本章主要内容
1,Windows窗口程序的基本结构
2,Windows程序的消息驱动机制
3,Windows程序从启动到结束的过程
16:55:00
例,简单的 Windows窗口程序
.WinMain()函数,Windows程序的入口点函数原型为,
int APIENTRY WinMain(HINSTANCE hInst,
HINSTANCE hPrevInst,
LPSTR lpCmdLine,
int nShowCmd);
.WndProc函数:窗口函数函数原型为:
LRESULT CALLBACK 函数名 (HWND hWin,
UINT uMsg,
WPARAM wPrm,
LPARAM lPrm);
Windows窗口程序的结构
16:55:00
例,另一个 Windows窗口应用程序
.Window程序中的窗口由程序员创建,创建窗口之前必须向系统说明窗口的属性与该窗口能表现出的行为 -- 向系统注册窗口类
.数据结构,WNDCLASS
说明窗口的属性与行为,以供注册窗口类时使用
typedef struct _WNDCLASS{
UINT style;
WNDPROC lpfnWndProc;
int cbClsExtra;
int cbWndExtra;
HINSTANCE hInstance;
HICON hIcon;
HCURSOR hCursor;
HBRUSH hbrBackground;
LPCTSTR lpszMenuName;
LPCTSTR lpszClassName;
}WNDCLASS,*PWNDCLASS;
16:55:00
Windows中的消息
Windows程序是事件驱动的,发生一个事件时,系统以消息的形式通知给应用程序,应用程序再来处理 (如何处理该事件由程序员编写的代码指明 )
消息是一种数据结构,由如下结构体定义:
typedef struct tagMSG{
HWND hwnd;
UINT message;
WPARAM wParam;
LPARAM lParam;
DWORD time;
POINT pt;
}MSG,*PMSG;
16:55:00
消息队列与消息循环
.消息队列
Windows中的窗口程序都有一个消息队列,在该窗口上发生某些事件时,消息进入该窗口的消息队列排队,等待程序处理
.消息循环
WinMain()函数中后面的 while循环就是消息循环
MSG msgMessage;
while(GetMessage(&msgMessage,NULL,0,0)){
TranslateMessage(&msgMessage);
DispatchMessage(&msgMessage);
}
其作用就是不断从消息队列中取出消息,经过解释,分发给窗口函数 WndProc()去处理,直到从消息队列中取出的消息的标识为 WM_QUIT,消息循环结束,整个应用程序随之结束
16:55:00
Windows程序从启动到结束的过程
1.进入 WinMain()函数 → 调用 RegisterClass()函数注册窗口类 → 调用 CreateWindow() 函 数 创 建 窗 口 。
CreateWindow()创建了窗口之后,直接给窗口函数送出标识为 WM_CREATE的消息,在此消息的处理程序段中进行初始化工作
2.显示并刷新窗口
3.进入消息循环,不断从消息队列中取出消息,若该消息是
WM_QUIT,则 GetMessage()函数返回 0,结束消息循环,进而结束程序
4.TranslateMessage() 对 键 盘 消 息 进 行 翻 译,
DispatchMessage()把消息分发给窗口函数,消息在窗口函数中被处理
5.程序不断重复 3和 4的操作
16:55:00
Windows程序从启动到结束的过程 (续 )
6.用户单击关闭按钮或键盘很按下 Alt+F4时,系统向该窗口发送 WM_CLOSE 消息,通 常 程 序 中 不 处 理 它,于是
DefWindowProc()处理它
7.DefWindowProc()收到 WM_CLOSE后,调用 DestroyWindow()
把窗口销毁,DestroyWindow()又发送 WM_DESTROY消息
8,程序对 WM_DESTROY 消 息 一 般 进 行 的 操 作 是 调 用
PostQuitMessage()函数
9.PostQuitMessage()函数把 WM_QUIT消息放入消息队列,
该消息由消息循环中的 GetMessage()函数取得,如步骤 3,
结束消息循环,从而结束整个程序
16:55:00
1,Windows窗口程序的基本结构
2,Windows程序的消息驱动机制
3,Windows程序从启动到结束的过程
16:55:00
例,简单的 Windows窗口程序
.WinMain()函数,Windows程序的入口点函数原型为,
int APIENTRY WinMain(HINSTANCE hInst,
HINSTANCE hPrevInst,
LPSTR lpCmdLine,
int nShowCmd);
.WndProc函数:窗口函数函数原型为:
LRESULT CALLBACK 函数名 (HWND hWin,
UINT uMsg,
WPARAM wPrm,
LPARAM lPrm);
Windows窗口程序的结构
16:55:00
例,另一个 Windows窗口应用程序
.Window程序中的窗口由程序员创建,创建窗口之前必须向系统说明窗口的属性与该窗口能表现出的行为 -- 向系统注册窗口类
.数据结构,WNDCLASS
说明窗口的属性与行为,以供注册窗口类时使用
typedef struct _WNDCLASS{
UINT style;
WNDPROC lpfnWndProc;
int cbClsExtra;
int cbWndExtra;
HINSTANCE hInstance;
HICON hIcon;
HCURSOR hCursor;
HBRUSH hbrBackground;
LPCTSTR lpszMenuName;
LPCTSTR lpszClassName;
}WNDCLASS,*PWNDCLASS;
16:55:00
Windows中的消息
Windows程序是事件驱动的,发生一个事件时,系统以消息的形式通知给应用程序,应用程序再来处理 (如何处理该事件由程序员编写的代码指明 )
消息是一种数据结构,由如下结构体定义:
typedef struct tagMSG{
HWND hwnd;
UINT message;
WPARAM wParam;
LPARAM lParam;
DWORD time;
POINT pt;
}MSG,*PMSG;
16:55:00
消息队列与消息循环
.消息队列
Windows中的窗口程序都有一个消息队列,在该窗口上发生某些事件时,消息进入该窗口的消息队列排队,等待程序处理
.消息循环
WinMain()函数中后面的 while循环就是消息循环
MSG msgMessage;
while(GetMessage(&msgMessage,NULL,0,0)){
TranslateMessage(&msgMessage);
DispatchMessage(&msgMessage);
}
其作用就是不断从消息队列中取出消息,经过解释,分发给窗口函数 WndProc()去处理,直到从消息队列中取出的消息的标识为 WM_QUIT,消息循环结束,整个应用程序随之结束
16:55:00
Windows程序从启动到结束的过程
1.进入 WinMain()函数 → 调用 RegisterClass()函数注册窗口类 → 调用 CreateWindow() 函 数 创 建 窗 口 。
CreateWindow()创建了窗口之后,直接给窗口函数送出标识为 WM_CREATE的消息,在此消息的处理程序段中进行初始化工作
2.显示并刷新窗口
3.进入消息循环,不断从消息队列中取出消息,若该消息是
WM_QUIT,则 GetMessage()函数返回 0,结束消息循环,进而结束程序
4.TranslateMessage() 对 键 盘 消 息 进 行 翻 译,
DispatchMessage()把消息分发给窗口函数,消息在窗口函数中被处理
5.程序不断重复 3和 4的操作
16:55:00
Windows程序从启动到结束的过程 (续 )
6.用户单击关闭按钮或键盘很按下 Alt+F4时,系统向该窗口发送 WM_CLOSE 消息,通 常 程 序 中 不 处 理 它,于是
DefWindowProc()处理它
7.DefWindowProc()收到 WM_CLOSE后,调用 DestroyWindow()
把窗口销毁,DestroyWindow()又发送 WM_DESTROY消息
8,程序对 WM_DESTROY 消 息 一 般 进 行 的 操 作 是 调 用
PostQuitMessage()函数
9.PostQuitMessage()函数把 WM_QUIT消息放入消息队列,
该消息由消息循环中的 GetMessage()函数取得,如步骤 3,
结束消息循环,从而结束整个程序
16:55:00