• windows消息分类PostMessage、SendMessage


    消息的知识:
    一、消息循环的阻塞
    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
    	);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    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);
    		}
    	}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28

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

    BOOL SendMessage/PostMessage(
    	HWND hWnd, //消息发送的目的窗口
    	UINT Msg, //消息ID
    	WPARAM wParam, //消息参数
    	LPARAM lParam //消息参数
    	);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

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

    case WM_DESTROY:
    		//PostQuitMessage(0);
    		PostMessage(hwnd,WM_QUIT,0,0);
    		//SendMessage(hwnd,WM_QUIT,0,0);
    		break;
    
    • 1
    • 2
    • 3
    • 4
    • 5

    系统消息-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
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
  • 相关阅读:
    Web学习笔记-JavaScript
    预约挂号项目之预约挂号模块
    双位置继电器XJLS-8G/220
    汉字与英文对照表
    Python基础之网络编程:2、OSI协议之七层协议
    ChatGPT如何管理对话历史?
    el-date-picker如何回显
    机组运行约束对机组节点边际电价的影响研究(Matlab代码实现)
    无CDN场景下的传统架构接入阿里云WAF防火墙的配置实践
    如何捕捉牛熊转变的信号,澳福认为只需了解一个模式
  • 原文地址:https://blog.csdn.net/weixin_43069562/article/details/127931599