windows消息机制

本文介绍了Windows消息机制,包括创建基本窗口程序、消息传递原理及SendMessage和PostMessage的区别。消息类型分为队列和非队列消息,系统根据HWND将消息传递到相应窗口线程。SendMessage在消息处理完毕后返回,PostMessage则立即将消息放入队列并返回。
摘要由CSDN通过智能技术生成

windows消息机制

1.创建基本的窗口程序
/*
基本的窗口程序的步骤:
1.注册窗口类(RegisterClass()),就像事件驱动一样,只有在相应的事件驱动里面注册了,分发的机制才会在事件触发时调用已经注册的对象,此对象成为实例对象hInstance
2.创建窗口( CreateWindow()),为实例对象hInstance创建一个窗口
3.显示窗口
4.接下来进入消息等待阶段,当所注册的事件被触发,那么在这个事件注册的过程将会被调用
*/
#include <windows.h>
#include <string>
#include <iostream>
#define WM_TEST_MSG (WM_USER+1)

LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) {
   
	//如果自己不进行处理就交给默认的处理函数处理,当然自己处理之后还是可以交给默认的处理函数

	bool b_ret = false;
	do {
   
		switch (message) {
   
		case WM_TEST_MSG: {
   
			int recv_data = (int)wParam;
			std::cout << "recv_data:" << recv_data;
			return (LRESULT)recv_data;//将接收的数据返回给sendMessage
			break;
		}
		case WM_PAINT:
			break;
		case WM_DESTROY: {
   
			MessageBoxA(NULL, "exit", "tips", 0);
			//b_ret = true;//这样就不交给默认处理函数处理,如果需要默认函数处理这里进行注释就好
			PostQuitMessage(0);//使用这个停止消息队列,不然只是关闭了窗口,但是消息队列仍然存在,程序未退出
			break;
		}
		}
	} while (false);
	if (!b_ret) b_ret = DefWindowProc(hwnd, message, wParam, lParam); //默认的处理函数
	return b_ret;
}

int main() {
   
	static TCHAR szAppName[] = TEXT("MyWindow");
	auto hInstance = GetModuleHandleA(NULL);
	HWND hwnd;
	MSG msg;
	WNDCLASS wndclass;        //声明一个窗口类对象


	//以下为窗口类对象wndclass的属性
	wndclass.lpfnWndProc = WndProc;                                   //窗口处理函数
	wndclass.hInstance = hInstance;					  //窗口实例句柄
	wndclass.lpszClassName = szAppName;                               //窗口类名
	wndclass.style = CS_HREDRAW | CS_VREDRAW;                         //窗口样式
	wndclass.lpszMenuName = NULL;                                     //窗口菜单:无
	wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);    //窗口背景颜色
	wndclass.cbWndExtra &#
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Windows消息机制是指在Windows操作系统中,用于实现应用程序之间的通信和事件处理的机制。每个消息都由一个消息标识符和一些相关的参数组成。当系统中发生某个事件时,Windows会将这个事件转化为一个消息,并将其放入消息队列中。应用程序通过接收消息并将其传递给适当的窗口过程来处理这些消息。 在Windows消息机制中,每个线程都有自己的消息队列。GUI线程通常拥有一个消息循环,负责接收和处理消息消息循环会不断从消息队列中获取消息,并将其翻译和分发给对应的窗口过程进行处理。 除了通过消息队列派发消息到窗口过程外,有些消息也可以直接发送到窗口过程进行处理,绕过消息队列和线程消息队列。例如,当用户激活一个新的应用程序窗口时,系统会直接发送一系列消息到窗口,包括WM_ACTIVATE、WM_SETFOCUS和WM_SETCURSOR等消息,用于通知窗口被激活、键盘输入被定向到窗口以及鼠标光标移到窗口的边界内。 因此,Windows消息机制是通过将事件转化为消息并通过消息队列进行传递,以实现应用程序之间的通信和事件处理的机制。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Windows消息机制](https://blog.csdn.net/King_weng/article/details/100072633)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值