每个Windows应用程序都有一个消息队列: ·Windows系统会把属于各个应用程序的消息放入 各自的消息队列。 大部分的消息都关联到某个窗口。 ·每个窗口都有一个消息处理函数。 Vindows应用程序不断地从自己的消息队列 中获取消息并调用相应窗口的消息处理函数 来处理获得的消息。 这个“取消息-处理消息”的过程构成了消息循环。 当取到某个特定消息(NM QUIT)后,消息循 环结束
◼ 每个Windows应用程序都有一个消息队列。 • Windows系统会把属于各个应用程序的消息放入 各自的消息队列。 ◼ 大部分的消息都关联到某个窗口。 • 每个窗口都有一个消息处理函数。 ◼ Windows应用程序不断地从自己的消息队列 中获取消息并调用相应窗口的消息处理函数 来处理获得的消息。 • 这个“取消息-处理消息”的过程构成了消息循环。 • 当取到某个特定消息(WM_QUIT)后,消息循 环结束
消息队列: 消息 (Windows) 主程序: /初始化 /进入消息循环 while(取消息) 消息处理函数: 处理消息 注意:每个消息的处理时间不宜太长, 否则会造成程序“假死”现象 (程序不响应其它消息)
主程序: //初始化 ...... //进入消息循环 while (取消息) { ...... 处理消息 } 消息队列: 消息处理函数: ...... 注意:每个消息的处理时间不宜太长, 否则会造成程序“假死”现象 (程序不响应其它消息)。 消息 (Windows)
基于Vindows API的过程式 Vindows应用程序设计 每个Vindows应用程序都必须提供一个主函数 WinMain,其主要功能是: 注册窗口类(窗口的基本信息) 窗口类信息包括:窗口类的名字、窗口的基本风格、消息处理函 数名、图标、光标、背景颜色以及菜单等。 每类窗口(不是每个窗口)都需要注册。 创建应用程序的主窗口其它窗口等到需要时再创建) 进入消息循环,直到接收到WM_QUT消息时,消息循环 结束。 程序还要为每类窗口提供一个消息处理函数,用于处 理发送到它的消息
◼ 每个Windows应用程序都必须提供一个主函数 WinMain,其主要功能是: • 注册窗口类(窗口的基本信息): ◼ 窗口类信息包括:窗口类的名字、窗口的基本风格、消息处理函 数名、图标、光标、背景颜色以及菜单等。 ◼ 每类窗口(不是每个窗口)都需要注册。 • 创建应用程序的主窗口(其它窗口等到需要时再创建)。 • 进入消息循环,直到接收到WM_QUIT消息时,消息循环 结束。 ◼ 程序还要为每类窗口提供一个消息处理函数,用于处 理发送到它的消息。 基于Windows API的过程式 Windows应用程序设计
消息队列: WinMain(...) 消息 {/注册窗口类 (Windows) 。11 /创建主窗口 ”01g /进入消息循环 消息处理函数: while (GetMessage(...)) WindowProc(...,message,...) switch(message) case...: DispatchMessage(...); case...: 011.10
WinMain(...) { //注册窗口类 ...... //创建主窗口 ...... //进入消息循环 while (GetMessage(...)) { ...... DispatchMessage(...); } } 消息队列: 消息处理函数: WindowProc(...,message,...) { switch(message) { case ...: case ...: ...... } } 消息 (Windows)
/Windows应用程序的主函数 #include<windows.h>/Vindows,所提供的API声明文件。 int APIENTRY WinMain(HINSTANCE hInstance,/本实例标识(Handle HINSTANCE hPrevInstance,/上一个实例标识 LPSTR IpCmdLine,/命令行参数 int nCmdShow)/主窗口显示方式 {/注册窗口类(下面是个示意,函数参数实际为一个结构WNDCLASS) RegisterClass(...,WindowProc,"my_window_class");// /创建并显示主窗口 HWND hWnd; hWnd=CreateWindow("my_window_class",...,x,y,width,height,...); ShowWindow(hWnd,nCmdShow); /消息循环,直到接收到WM QUIT消息 while(GetMessage(&msg,NULL,O,O)/从消息队列中取消息。 { DispatchMessage(&msg);/把消息发送到程序相应的窗口。 return msg.wParam;
//Windows应用程序的主函数 #include <windows.h> //Windows所提供的API声明文件。 int APIENTRY WinMain(HINSTANCE hInstance, //本实例标识(Handle) HINSTANCE hPrevInstance, //上一个实例标识 LPSTR lpCmdLine, //命令行参数 int nCmdShow ) //主窗口显示方式 { //注册窗口类(下面是个示意,函数参数实际为一个结构WNDCLASS) RegisterClass(..., WindowProc, "my_window_class"); //示意 ...... //创建并显示主窗口 HWND hWnd; hWnd=CreateWindow("my_window_class",…,x,y,width,height,...); ShowWindow(hWnd, nCmdShow); ...... //消息循环,直到接收到WM_QUIT消息 while (GetMessage(&msg, NULL, 0, 0)) //从消息队列中取消息。 { ...... DispatchMessage(&msg); //把消息发送到程序相应的窗口。 } return msg.wParam; }