【C++】<Windows编程中消息即事件的处理>

本文详细介绍了Windows编程中消息事件的处理,包括注册窗口类、消息处理函数、通用窗口消息和各种特定消息的处理,如滚动条、按钮、键盘、鼠标等事件。通过对这些消息的理解和处理,开发者可以更好地控制和响应Windows应用程序中的用户交互。
摘要由CSDN通过智能技术生成

目录

一、注册窗口类,指定消息处理函数,捕获消息并发给处理函数

二、消息处理函数

三、通用窗口消息

四、其他消息

1.滚动条消息

2.按钮控件消息

3.按钮控件通知消息

4.按键消息

5.系统菜单等消息

6.组合框控件消息

7.组合框控件通知消息

8.列表框控件消息

9.列表框控件通知消息

10.鼠标消息

11.窗口相关消息

12.输入法相关消息

13.剪贴板相关消息

14.其他消息


一、注册窗口类,指定消息处理函数,捕获消息并发给处理函数
/* The 'main' function of Win32 GUI programs: this is where execution starts */
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {
	WNDCLASSEX wc; /* A properties struct of our window */
	MSG msg; /* A temporary location for all messages */

	/* zero out the struct and set the stuff we want to modify */
	memset(&wc,0,sizeof(wc));
	wc.cbSize		 = sizeof(WNDCLASSEX);
	wc.lpfnWndProc	 = WndProc; /* 指定消息处理函数 */
    ...
    RegisterClassEx(&wc);/* 注册窗口类 */
    .../* 创建窗口 */

    while(GetMessage(&msg, NULL, 0, 0) > 0) { /* 捕获消息 */
		TranslateMessage(&msg); /* 把虚拟键消息转换为字符消息 */
		DispatchMessage(&msg); /* 发送消息给消息处理函数 */
	}
	return msg.wParam;
    }
二、消息处理函数
/* This is where all the input to the window goes to */
LRESULT CALLBACK WndProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam) {
switch(Message) {
		
		/* 分类处理捕获的消息 */
		case WM_NCCREATE:{
			MessageBox(NULL,"你正在创建窗口","警告",MB_OK);
			return DefWindowProc(hwnd, Message, wParam, lParam);
			break;
		}
		case WM_CREATE:{			
			MessageBox(NULL,"你已创建窗口","警告",MB_OK);
			return DefWindowProc(hwnd, Message, wParam, lParam);			
			break;
		}
		case WM_DESTROY: {
		MessageBox(NULL,"你已关闭窗口","警告",MB_OK);			
			PostQuitMessage(0);			
			break;		
		}
		case WM_CLOSE:{
            //return 0;/*禁止关闭可直接返回0*/
			MessageBox(NULL,"你正在关闭当前窗口","警告",MB_OK);
			return DefWindowProc(hwnd, Message, wParam, lParam);			
			break;
		}
		/* 所有其他信息的处理调用默认处理函数 */
		default:
			return DefWindowProc(hwnd, Message, wParam, lParam);
	}
	return 0;
}
三、通用窗口消息


WM_NULL:--------->空消息,可检测程序是否有响应等
WM_CREATE:--------->新建一个窗口
WM_DESTROY:--------->销毁一个窗口
WM_MOVE:--------->移动一个窗口
WM_SIZE:--------->改变一个窗口的大小
WM_ACTIVATE:--------->一个窗口被激活或失去激活状态
WM_SETFOCUS:--------->将焦点转向一个窗口
WM_KILLFOCUS:--------->使一个窗口失去焦点
WM_ENABLE:--------->使一个窗口处于可用状态
WM_SETREDRAW:--------->设置窗口是否能重绘
WM_SETTEXT:--------->设置一个窗口的文本
WM_GETTEXT:--------->复制窗口的文本到缓冲区
WM_GETTEXTLENGTH:--------->得到窗口的文本长度(不含结束符)
WM_PAINT:--------->窗口重绘
WM_CLOSE:--------->用户关闭窗口时会发送本消息,紧接着会发送WM_DESTROY消息
WM_QUERYENDSESSION:--------->关机或注销时系统会按优先级给各进程发送WM_QUERYENDSESSION,告诉应用程序要关机或注销了
WM_QUIT:--------->关闭消息循环结束程序的运行
WM_QUERYOPEN:--------->最小化的窗口即将被恢复以前的大小位置
WM_ERASEBKGND:--------->当一个窗口的背景必须被擦除时本消息会被触发(如:窗口大小改变时)
WM_SYSCOLORCHANGE:--------->当系统颜色改变时,发送本消息给所有顶级窗口
WM_ENDSESSION:--------->关机或注销时系统会发出WM_QUERYENDSESSION消息,然后将本消息发送给应用程序,通知程序会话结束
WM_SHOWWINDOW:--------->发送本消息给一个窗口,以便隐藏或显示该窗口
WM_WININICHANGE:--------->读写\"win.ini\"时会发送本消息给所有顶层窗口,通知其它进程该文件已被更改
WM_DEVMODECHANGE:--------->改变设备模式设置(\"win.ini\")时,处理本消息的应用程序可重新初始化它们的设备模式设置
WM_ACTIVATEAPP:--------->窗口进程激活状态改动,正被激活的窗口属于不同的应用程序 //??
WM_FONTCHANGE:--------->当系统的字体资源库变化时发送本消息给所有顶级窗口
WM_TIMECHANGE:--------->当系统的时间变化时发送本消息给所有顶级窗口
WM_CANCELMODE:--------->发送本消息来取消某种正在进行的模态(操作)(如鼠示捕获),例如:启动一个模态窗口时,父窗会收到本消息;该消息无参数
WM_SETCURSOR:--------->若鼠标光标在某窗口内移动且鼠标没被捕获时,就会发送本消息给某个窗口
WM_MOUSEACTIVATE:--------->当鼠标光标在某个未激活窗口内,而用户正按着鼠标的某个键时,会发送本消息给当前窗口
WM_CHILDACTIVATE:--------->点击窗口标题栏或当窗口被激活、移动、大小改变时,会发送本消息给MDI子窗口
WM_QUEUESYNC:--------->本消息由基于计算机的训练程序发送,通过WH_JOURNALPALYBACK的HOOK程序分离出用户输入消息
WM_GETMINMAXINFO:--------->当窗口将要改变大小或位置时,由系统发送本消息给窗口,用户拖动一个可重置大小的窗口时便会发出本消息
WM_PAINTICON:--------->当一个最小化的窗口图标将被重绘时发送本消息
WM_ICONERASEBKGND:--------->本消息发送给某个最小化的窗口,仅当它在画图标前它的背景必须被重画
WM_NEXTDLGCTL:--------->发送本消息给一个对话框程序窗口过程,以便在各控件间设置键盘焦点位置
WM_SPOOLERSTATUS:--------->每当打印管理列队增加或减少一条作业时就会发出本消息
WM_DRAWITEM:--------->按钮、组合框、列表框、菜单的外观改变时会发送本消息给这些控件的所有者
WM_MEASUREITEM:--------->按钮、组合框、列表框、列表控件、菜单项被创建时会发送本消息给这些控件的所有者
WM_DELETEITEM:--------->当列表框或组合框被销毁或通过LB_DELETESTRING、LB_RESETCONTENT、CB_DELETESTRING或CB_RESETCONTENT消息删除某些项时,会发送本消息给这些控件的所有者
WM_VKEYTOITEM:--------->LBS_WANTKEYBOARDINPUT风格的列表框会发出本消息给其所有者,以便响应WM_KEYDOWN消息
WM_CHARTOITEM:--------->LBS_WANTKEYBOARDINPUT风格的列表框会发送本消息给其所有者,以便响应WM_CHAR消息
WM_SETFONT:--------->指定控件所用字体
WM_GETFONT:--------->得到当前控件绘制其文本所用的字体
WM_SETHOTKEY:--------->为某窗口关联一个热键
WM_GETHOTKEY:--------->确定某热键与某窗口是否相关联
WM_QUERYDRAGICON:--------->本消息发送给最小化的窗口(iconic),当该窗口将被拖放而其窗口类中没有定义图标,应用程序能返回一个图标或光标的句柄。当用户拖放图标时系统会显示这个图标或光标
WM_COMPAREITEM:--------->可发送本消息来确定组合框(CBS_SORT)或列表框(LBS_SORT)中新增项的相对位置
WM_GETOBJECT:--------->\"oleacc.dll\"(COM组件)(Microsoft Active Accessibility:方便残疾人使用电脑的一种技术)发送本消息激活服务程序以便获取它所包含的关联对象的信息
WM_COMPACTING:--------->显示内存已经很少了
WM_COMMNOTIFY:--------->Win3.1中,当串口事件产生时,通讯设备驱动程序发送消息本消息给系统,指示输入输出队列的状态
WM_WINDOWPOSCHANGING:--------->本消息会发送给那些大小和位置(Z_Order)将被改变的窗口,以调用SetWindowPos函数或其它窗口管理函数
WM_WINDOWPOSCHANGED:--------->本消息会发送给那些大小和位置(Z_Order)已被改变的窗口,以调用SetWindowPos函数或其它窗口管理函数
WM_POWER:--------->当系统将要进入暂停状态时发送本消息(适用于16位的windows)
WM_COPYDATA:--------->当一个应用程序传递数据给另一个应用程序时发送本消息
WM_CANCELJOURNAL:--------->当用户取消程序日志激活状态时,发送本消息给那个应用程序。该消息使用空窗口句柄发送
WM_NOTIFY:--------->当某控件的某事件已发生或该控件需得到一些信息时,发送本消息给其父窗
WM_INPUTLANGCHANGEREQUEST:--------->当用户通过过单击任务栏上的语言指示符或某快捷键组合选择改变输入法时系统会向焦点窗口发送本消息
WM_INPUTLANGCHANGE:--------->切换输入法后,系统会发送本消息给受影响的顶层窗口
WM_TCARD:--------->程序已初始化windows帮助例程时会发送本消息给应用程序
WM_HELP:--------->按下<F1>后,若某菜单是激活的,就发送本消息给此窗口关联的菜单;否则就发送给有焦点的窗口;若当前都没有焦点,就把本消息发送给当前激活的窗口
WM_USERCHANGED:--------->当用户已登入或退出后发送本消息给所有窗口;当用户登入或退出时系统更新用户的具体设置信息,在用户更新设置时系统马上发送本消息
WM_NOTIFYFORMAT:--------->公用控件、自定义控件和其父窗通过本消息判断控件在WM_NOTIFY通知消息中是使用ANSI还是UNICODE,使用本消息能使某个控件与它的父控件间进行相互通信
WM_CONTEXTMENU:--------->当用户在某窗口中点击右键就发送本消息给该窗口,设置右键菜单
WM_STYLECHANGING:-

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值