Windows API (DAY11) 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 的值。

调用这个函数的例子如下:

 //主程序入口
 int APIENTRY _tWinMain(HINSTANCE hInstance,
	HINSTANCE hPrevInstance,
	LPTSTR	lpCmdLine,
	int	nCmdShow)
 {
	 UNREFERENCED_PARAMETER(hPrevInstance);
	 UNREFERENCED_PARAMETER(lpCmdLine);
	
	 MSG msg;
	 HACCEL hAccelTable;
	
	 // 加载全局字符串。
	 LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
	 LoadString(hInstance, IDC_TESTWIN, szWindowClass, MAX_LOADSTRING);
	 MyReg isterClass(hInstance);
	
	 // 应用程序初始化:
	 if (!Init Instance (hInstance, nCmdShow))
	 {	
		return FALSE;
	 }
	
	 hAccelTab le = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_TESTWIN));
	
	 // 消息循环:
	 BOOL bRet;
	 while ( (bRet = GetMessage(&msg, NULL, 0, 0)) != 0)
	 {
		if (bRet == -1)
		{
			//处理出错。
		}
		else if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
		{
			TranslateMessage(&msg);
			DispatchMessage(&msg);
		}
	 }
	
	 return (int) msg.wParam;
 }
  • 第28行就是获取所有窗口的消息回来。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Windows API 一日一练(1)第一个应用程序 ---------------------------------------------------------------3 Windows API 一日一练(2)使用应用程序句柄------------------------------------------------------------4 Windows API 一日一练(3)使用命令行参数 ---------------------------------------------------------------6 Windows API 一日一练(4)MessageBox函数--------------------------------------------------------9 Windows API 一日一练(5)RegisterClass 和 RegisterClassEx 函数---------------11 Windows API 一日一练(6)CreateWindow 函数 -------------------------------------------------14 Windows API 一日一练(7)ShowWindow 函数 ---------------------------------------------------17 1 Windows API 一日一练(8)UpdateWindow 函数------------------------------------------------18 Windows API 一日一练(9)WindowProc 和 DefWindowProc 函数-----------------20 Windows API 一日一练(10)LoadAccelerators 函数------------------------------------------22 Windows API 一日一练(11)GetMessage 函数----------------------------------------------------24 Windows API 一日一练(12)TranslateAccelerator 函数-----------------------------------26 Windows API 一日一练(13)TranslateMessage 函数----------------------------------------28 Windows API 一日一练(14)DispatchMessage 函数------------------------------------------30 Windows API 一日一练(15)PostQuitMessage 函数------------------------------------------32 Windows API 一日一练(16)BeginPaint 和 EndPaint 函数 -------------------------------34 Windows API 一日一练(17)DialogBox 和 DialogBoxParam 函数------------------36 Windows API 一日一练(18)EndDialog 函数--------------------------------------------------------39 Windows API 一日一练(19)DestroyWindow 函数 --------------------------------------------40 Windows API 一日一练(20)LoadString、LoadIcon 和 LoadCursor 函数-----42 Windows API一日一练(21)SetWindowLongPtr 和 GetWindowLongPtr 函数
用于从内存加载/卸载/注入DLL。支持加载易语言静态链接的DLL。 ========================================== DLL 载入窗口例子 ========================================== .版本 2 .数据类型 MSG .成员 hwnd, 整数型 .成员 message, 整数型 .成员 wParam, 整数型 .成员 lParam, 整数型 .成员 time, 整数型 .成员 x, 整数型 .成员 y, 整数型 .版本 2 .DLL命令 GetMessageA, 逻辑型, "user32.dll", "GetMessageA" .参数 lpMsg, MSG .参数 hWnd, 整数型 .参数 wMsgFilterMin, 整数型 .参数 wMsgFilterMax, 整数型 .DLL命令 TranslateMessage, 逻辑型, "user32.dll", "TranslateMessage" .参数 lpMsg, MSG .DLL命令 DispatchMessageA, 整数型, "user32.dll", "DispatchMessageA" .参数 lpMsg, MSG .DLL命令 IsWindow, 逻辑型, "user32.dll", "IsWindow" .参数 hWnd, 整数型 .DLL命令 CreateThread, 整数型, "kernel32.dll", "CreateThread" .参数 lpThreadAttributes, 整数型 .参数 dwStackSize, 整数型 .参数 lpStartAddress, 整数型 .参数 lpParameter, 整数型 .参数 dwCreationFlags, 整数型 .参数 lpThreadId, 整数型 .DLL命令 CloseHandle, 逻辑型, "kernel32.dll", "CloseHandle" .参数 hObject, 整数型 .版本 2 .子程序 EnterProc, 整数型, 公开, 入口函数 .参数 param, 整数型 返回 (载入窗口 (窗口1)) .子程序 载入窗口, 整数型 .参数 窗口, 窗口 .局部变量 hThread, 整数型 hThread = CreateThread (0, 0, 到整数 (private_thread), 0, 0, 0) CloseHandle (hThread) 返回 (选择 (hThread ≠ 0, 1, 0)) .子程序 private_thread, 整数型 .参数 param, 整数型 .局部变量 hwnd, 整数型 .局部变量 msg, MSG 载入 (窗口1, , 假) .如果真 (是否已创建 (窗口1)) hwnd = 窗口1.取窗口句柄 () .如果真结束 .判断循环首 (IsWindow (hwnd) 且 GetMessageA (msg, hwnd, 0, 0)) TranslateMessage (msg) DispatchMessageA (msg) .判断循环尾 () 返回 (0) ====================================================================================================== 操作系统支持: Windows

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值