windows消息分类PostMessage、SendMessage

本文介绍了Windows消息处理中的消息循环阻塞,包括GetMessage和PeekMessage函数的使用。接着讲解了发送消息的两种方式:SendMessage会等待消息处理完成,而PostMessage则立即返回。同时提到了PostQuitMessage用于发送退出消息。还讨论了系统消息和用户自定义消息的ID范围,以及如何创建自定义消息。
摘要由CSDN通过智能技术生成

消息的知识:
一、消息循环的阻塞
GetMessage-从系统获取消息,将消息从系统中移除,阻塞函数。当系统无消息时,会等候下一条消息。
多一句嘴,TranslateMessage消息只翻译键盘消息
PeekMessage-以查看的方式从系统获取消息,可以不将消息从系统移除,非阻塞函数。当系统无消息时,返回FALSE,继续执行后续代码。

//PeekMessage定义
BOOL PeekMessage(
	LPMSG lpMsg, //message infomation
	HWND hWnd, //handle to window
	UINT wMsgFilterMin, //firstMessage
	UINT wMsgFilterMax, //lastMessgae
	UINT wRemoveMsg //移除标识 PM_REMOVE/PM_NOREMOVE
	);

PeekMessage用法示例:(最后的WriteConsole函数真的是闲的蛋疼)

while(1)
	{
   
		if(PeekMessage(&msg,hwnd,0,0,PM_NOREMOVE))
		{
   
			//消息队列中有消息
			if(GetMessage(&msg,hwnd,0,0))
			{
   
				//有消息时处理消息
				TranslateMessage(&msg);
				DispatchMessage(&msg);
			}
			else
			{
   
				//如果获得消息是0,退出消息循环
				return 0;
			}
		}
		else
		{
   
			//消息队列中没有消息,可以利用这时候的资源进行别的操作处理
			WriteConsole(hOutPut,TEXT("空闲\n"),lstrlen(TEXT("空闲\n")),NULL,NULL);
		}
	}

二、发送消息
SendMessage-发送消息,会等候消息处理的结果。
PostMessage-投递消息,消息发出后立即返回,不等候消息处理。
SendMessage/Postmesage函数定义

BOOL SendMessage/PostMessage(
	HWND hWnd, //消息发送的目的窗口
	UINT Msg, //消息ID
	WPARAM wParam, //消息参数
	LPARAM lParam //消息参数
	);

PostQuitMessage也是投递消息,只不过投递的是退出消息
自主发送退出消息WM_QUIT消息给窗口

case WM_DESTROY:
		//PostQuitMessage(0);
		PostMessage(hwnd,WM_QUIT,0,0);
		//SendMessage(hwnd,WM_QUIT,0,0);
		break;

系统消息-ID范围0~0x03FF(1024个消息)
由系统定义好的消息,可以在程序中直接使用
用户自定义消息-ID范围0x0400-0x7FFF(31743)
由用户自定义,满足用户自己的需求。由用户自已发送消息,并响应处理。
自定义消息宏:WM_USER 0x400

//1.定义自定义消息
#define WM_ZCMMSG WM_USER+0x01
//2.发送自定义消息
PostMessage(hwnd,WM_ZCMMSG,100,200);
SendMessage(hwnd,WM_ZCMMSG,200,300);
//3.处理消息(在消息处理函数中)
void OnZcmMessage
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值