天天看点

Windows API一日一练(11)GetMessage函数

应用程序为了获取源源不断的消息,就需要调用函数 GetMessage 来实现,因为所有在窗口上的输入消息,都会放到应用程序的消息队列里,然后再发送给窗口回调函数处理。 函数 GetMessage 声明如下: WINUSERAPI BOOL WINAPI GetMessageA(     __out LPMSG lpMsg,     __in_opt HWND hWnd,     __in UINT wMsgFilterMin,     __in UINT wMsgFilterMax); WINUSERAPI BOOL WINAPI GetMessageW(     __out LPMSG lpMsg,     __in_opt HWND hWnd,     __in UINT wMsgFilterMin,     __in UINT wMsgFilterMax); #ifdef UNICODE #define GetMessage GetMessageW #else #define GetMessage GetMessageA #endif // !UNICODE lpMsg 是从线程消息队列里获取到的消息指针。 hWnd 是想获取那个窗口的消息,当设置为 NULL 时是获取所有窗口的消息。 wMsgFilterMin 是获取消息的 ID 编号最小值,如果小于这个值就不获取回来。 wMsgFilterMax 是获取消息的 ID 编号最大值,如果大于这个值就不获取回来。 函数返回值可能是 0 ,大于 0 ,或者等于 -1 。如果成功获取一条非 WM_QUIT 消息时,就返回大于 0 的值;如果获取 WM_QUIT 消息时,就返回值 0 值。如果出错就返回 -1 的值。   调用这个函数的例子如下: #001 // 主程序入口 #002 // #003 //  蔡军生  2007/07/19 #004 // QQ: 9073204 #005 // #006 int APIENTRY _tWinMain(HINSTANCE hInstance, #007                       HINSTANCE hPrevInstance, #008                       LPTSTR    lpCmdLine, #009                       int       nCmdShow) #010 { #011  UNREFERENCED_PARAMETER(hPrevInstance); #012  UNREFERENCED_PARAMETER(lpCmdLine); #013  #014   // #015  MSG msg; #016  HACCEL hAccelTable; #017  #018  // 加载全局字符串。 #019  LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING); #020  LoadString(hInstance, IDC_TESTWIN, szWindowClass, MAX_LOADSTRING); #021  MyRegisterClass(hInstance); #022  #023  // 应用程序初始化 : #024  if (!InitInstance (hInstance, nCmdShow)) #025  { #026         return FALSE; #027  } #028  #029  hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_TESTWIN)); #030  #031  // 消息循环 : #032  BOOL bRet; #033  while ( (bRet = GetMessage(&msg, NULL, 0, 0)) != 0) #034  { #035         if (bRet == -1) #036         { #037               // 处理出错。 #038  #039         } #040         else if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg)) #041         { #042               TranslateMessage(&msg); #043               DispatchMessage(&msg); #044         } #045  } #046  #047  return (int) msg.wParam; #048 } #049    第 33 行就是获取所有窗口的消息回来。  

转载于:https://www.cnblogs.com/ajuanabc/archive/2007/07/20/2464333.html