• 【免杀前置课——Windows编程】三、第一个窗口程序——WINDOWS程序框架-消息、WINDOWS中应用程序如何接受消息


    第一个窗口程序

    在这里插入图片描述
    在这里插入图片描述

    WINDOWS程序框架-消息

    Windows系统是基于消息的操作系统
    每一个窗口都在不停的处理消息,所有的操作都是接收到消息之后,进行处理的结果。
    围绕着消息的处理,产生了获取消息的消息泵机制也叫消息循环,以及处理消息的窗口回调函数机制。

    消息的产生

    Windows下产生消息的时机共有以下四种:
    1、用户主动产生的消息。
    2、Windows系统本身产生的消息。
    3、应用程序本身产生的消息。
    4、其他应用程序产生的消息。

    应用程序如何接受消息

    windows和每个GUi程序都有自己的消息队列,消息传入消息队列中,首先由windows系统消息队列接受,而后发送给GUI程序消息队列。
    在这里插入图片描述
    通过发送消息来判断这些窗口是否创建与关闭。

    #include
    #include
    
    LRESULT CALLBACK Wndproc(
    	_In_ HWND	hwnd,
    	_In_ UINT	uMsg,
    	_In_ WPARAM wParam,//字参数:通常用来传递别的参数,两个参数都是32位
    	_In_ LPARAM lParam//长参数:低四位指向鼠标X坐标,高四位指向鼠标Y坐标,通常用来传送地址
    ) 
    {
    	switch (uMsg)
    	{
    	case WM_CREATE:
    		MessageBoxW(hwnd, L"窗口创建了", L"提示", MB_OK);
    		break;
    	case WM_CLOSE:
    		MessageBoxW(hwnd, L"窗口关闭了", L"提示", MB_OK);
    		DestroyWindow(hwnd);
    		PostQuitMessage(0);//像系统指示线程请求终止(退出)
    		break;
    	}
    	return DefWindowProcW(hwnd, uMsg, wParam, lParam);
    }
    
    int WINAPI WinMain(
    	HINSTANCE hInstance,
    	HINSTANCE hPreInstance,
    	LPSTR lpCmdLine,
    	int nCmdShow
    ) 
    {
    	//1、创建窗口类
    	WNDCLASSW myClass = { 0 };
    	myClass.lpszClassName = L"dsdHook";
    	myClass.lpfnWndProc = Wndproc;//窗口回调函数
    	//2、注册窗口类
    	RegisterClassW(&myClass);
    	//3、创建窗口
    	HWND hwindow = CreateWindowW(
    		myClass.lpszClassName,
    		L"dsdHook",
    		WS_OVERLAPPEDWINDOW,//样式
    		CW_USEDEFAULT,//x坐标
    		0,//y坐标
    		CW_USEDEFAULT,//宽度
    		0,//高度
    		NULL,//窗口句柄
    		NULL,
    		hInstance,//应用实例句柄
    		0//回调函数
    	);
    	//4、显示窗口
    	ShowWindow(hwindow, SW_SHOWNORMAL);
    	//5、获取消息
    	MSG msg = { 0 };
    	while (GetMessageW(&msg,0,0,0)) //第二个参数0代表接受所有窗口的返回值
    	{
    		DispatchMessageW(&msg);//分发消息给消息处理函数
    	}
    	
    	return 0;
    }
    
    • 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
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  • 相关阅读:
    MySQL基础——DDL、DML、DQL、DCL语句
    从table1 里获取每个person_id最大end_date的数据。(inner join)
    如何在h5和小程序中适配iphoneX及更高版本全面屏底部的安全区
    MASA Framework -- 跨进程事件 IntegrationEventBus入门与设计
    CFdiv2-Intersection and Union-(线段树+转化求贡献)
    关于流量卡首充说明以及注意事项!
    android 垂直方向进度条progressbar
    树、二叉树、树的遍历、树的序列化
    Linux基本权限管理
    【Markdown语法高级】让你的博客更精彩(四:设置字体样式以及颜色对照表)
  • 原文地址:https://blog.csdn.net/m0_62783065/article/details/127701981