3.2.3 消息处理过程实例我们已经对消息有了些了解那到底消息是什么呢其实消息不过是定义了一个结构在微软中定义的是MSG结构自己也可以定义不同的结构然后定义一堆ID号例如#define WM_MSG01 0X0001…..#define WM_MSG** 0X*****调到函数中用swicth 和case语句对每一种ID进行相应的处理。在Windows的编程中有一个很经典的程序“Hello World”。我们也用这个最简单的程序来说消息的处理过程。这个程序可以直接在VC中用向导生成。首先任何一个Windows程序都是从WinMain开始的。int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow){// TODO: Place code here.MSG msg;HACCEL hAccelTable;// Initialize global stringsLoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);LoadString(hInstance, IDC_AA, szWindowClass, MAX_LOADSTRING);MyRegisterClass(hInstance);// Perform application initialization:if (!InitInstance (hInstance, nCmdShow)){return FALSE;}hAccelTable LoadAccelerators(hInstance, (LPCTSTR)IDC_AA);// Main message loop:while (GetMessage(msg, NULL, 0, 0)){if (!TranslateAccelerator(msg.hwnd, hAccelTable, msg)){TranslateMessage(msg);DispatchMessage(msg);}}return msg.wParam;}大家可能对这段代码已很熟悉了在以前用API进行Windows编程时几乎所有的程序都会去套用这个框架。从一个WinMain中注册一个窗口其他再用GetMessage取得窗口的消息翻译后分给对应的窗口。其实很多程序可以完全不用注册窗口。它只要做一些事件当有事件来时就处理相应的事件。例如以下就是一个Windows程序其中没有用到任何消息循环只是在运行中弹出一个对话框//-------------------------------------------------// HelloMsg.c -- Displays Hello, Windows 98! in a//message box// -----------------------------------------------#include windows.hint WINAPI WinMain ( HINSTANCE hInstance,HINSTANCE hPrevInstance,PSTR szCmdLine, int iCmdShow){MessageBox (NULL, TEXT (Hello, Windows 98!),TEXT (HelloMsg), 0) ;return 0 ;}可以看到这个WIN32的程序就没用到微软的框架它完全是自己做自己的事直到被中止。实际上很多应用可以不用窗口例如Windows NT的服务程序就不需要窗口。