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

目录

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

二、消息处理函数

三、通用窗口消息

四、其他消息

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:--------->当调用SetWindowLong函数将要改变一个或多个窗口的风格时,发送本消息给那个窗口
WM_STYLECHANGED:--------->当调用SetWindowLong函数改变一个或多个窗口的风格后,发送本消息给那个窗口
WM_DISPLAYCHANGE:--------->当显示器的分辨率改变后,发送本消息给所有窗口
WM_GETICON:--------->本消息发送给某个窗口,用于返回与某窗口有关联的大图标或小图标的句柄
WM_SETICON:--------->应用程序发送本消息让一个新的大图标或小图标与某窗口相关联
WM_NCCREATE:--------->当某窗口首次被创建时,本消息在WM_CREATE消息发送前发送
WM_NCDESTROY:--------->本消息通知某窗口,非客户区正在销毁
WM_NCCALCSIZE:--------->当某窗口的客户区的大小和位置须被计算时发送本消息
WM_NCHITTEST:--------->当用户在在非客户区移动鼠标、按住或释放鼠标时发送本消息(击中测试);若鼠标没有被捕获,则本消息在窗口得到光标之后发出,否则消息发送到捕获到鼠标的窗口
WM_NCPAINT:--------->当窗口框架(非客户区)必须被被重绘时,应用程序发送本消息给该窗口
WM_NCACTIVATE:--------->本消息发送给某窗口,在窗口的非客户区被激活时重绘窗口
WM_GETDLGCODE:--------->发送本消息给某个与对话框程序关联的控件,系统控制方位键和TAB键使输入进入该控件,通过响应本消息应用程序可把它当成一个特殊的输入控件并能处理它
WM_SYNCPAINT:--------->当避免联系独立的GUI线程时,本消息用于同步刷新,本消息由系统确定是否发送
WM_NCMOUSEMOVE:--------->当光标在某窗口的非客户区内移动时,发送本消息给该窗口
WM_NCLBUTTONDOWN:--------->当光标在某窗口的非客户区内的同时按下鼠标左键,会发送本消息
WM_NCLBUTTONUP:--------->当用户释放鼠标左键的同时光标在某窗口的非客户区内时,会发送本消息
WM_NCLBUTTONDBLCLK:--------->当用户双击鼠标左键的同时光标在某窗口的非客户区内时,会发送本消息
WM_NCRBUTTONDOWN:--------->当用户按下鼠标右键的同时光标在某窗口的非客户区内时,会发送本消息
WM_NCRBUTTONUP:--------->当用户释放鼠标右键的同时光标在某窗口的非客户区内时,会发送本消息
WM_NCRBUTTONDBLCLK:--------->当用户双击鼠标右键的同时光标在某窗口的非客户区内时,会发送本消息
WM_NCMBUTTONDOWN:--------->当用户按下鼠标中键的同时光标在某窗口的非客户区内时,会发送本消息
WM_NCMBUTTONUP:--------->当用户释放鼠标中键的同时光标在某窗口的非客户区内时,会发送本消息
WM_NCMBUTTONDBLCLK:--------->当用户双击鼠标中键的同时光标在某窗口的非客户区内时,会发送本消息

四、其他消息
1.滚动条消息


SBM_SETPOS:--------->设置滚动条上滑块的位置
SBM_GETPOS:--------->获取滚动条上滑块的位置
SBM_SETRANGE:--------->设置滚动条的最大与最小位置值
SBM_SETRANGEREDRAW:--------->设置滚动条的最大与最小位置值,并重绘滚动条
SBM_GETRANGE:--------->获取滚动条的最大与最小位置值
SBM_ENABLE_ARROWS:--------->设置滚动条的最大与最小位置值,并重绘滚动条
SBM_SETSCROLLINFO:--------->设置滚动条的参数,本消息通过SCROLLINFO结构指定多种参数,具体指定哪些参数由结构中的fMask成员确定
SBM_GETSCROLLINFO:--------->获取滚动条的参数,发送本消息后,将在SCROLLINFO结构中返回控件的多种参数,当然须事先设定结构的fMask成员以确定具体要取得哪些参数

2.按钮控件消息


BM_GETCHECK:--------->获取单选按钮或复选框的状态
BM_SETCHECK:--------->设置单选按钮或复选框的状态
BM_GETSTATE:--------->确定单选按钮或复选框的状态
BM_SETSTATE:--------->改变按钮的高亮状态
BM_SETSTYLE:--------->改变按钮的风格
BM_CLICK:--------->模拟用户点击按钮
BM_GETIMAGE:--------->获取与按钮相关联的图片句柄(图标或位图)
BM_SETIMAGE:--------->把按钮与某张图片相关联(图标或位图),注:按钮须有BS_ICON风格

3.按钮控件通知消息


BN_CLICKED:--------->用户单击了按钮,父窗通过WM_COMMAND来接收本通知消息
BN_DBLCLK:--------->用户双击了按钮(BS_OWNERDRAW或BS_RADIOBUTTON风格),父窗通过WM_COMMAND来接收本通知消息
BN_DISABLE:--------->按钮被禁止,父窗通过WM_COMMAND来接收本通知消息
BN_DOUBLECLICKED:--------->用户双击了按钮(与BN_DBLCLK同)(BS_OWNERDRAW或BS_RADIOBUTTON风格),父窗通过WM_COMMAND来接收本通知消息
BN_HILITE:--------->用户选择(即加亮)了按钮(与BN_PUSHED相同),父窗通过WM_COMMAND来接收本通知消息
BN_KILLFOCUS:--------->按钮失去了键盘焦点(按钮须有BS_NOTIFY风格才能发送本消息),父窗通过WM_COMMAND来接收本通知消息
BN_PAINT:--------->按钮应当重绘,父窗通过WM_COMMAND来接收本通知消息
BN_PUSHED:--------->用户加亮了按钮(与BN_HILITE相同),父窗通过WM_COMMAND来接收本通知消息
BN_SETFOCUS:--------->按钮收到键盘焦点(按钮须有BS_NOTIFY风格才能发送本消息),父窗通过WM_COMMAND息来接收本通知消息
BN_UNHILITE:--------->按钮的加亮应当去掉(与BN_UNPUSHED相同),父窗通过WM_COMMAND来接收本通知消息
BN_UNPUSHED:--------->按钮的加亮应当去掉(与BN_UNHILITE相同),父窗通过WM_COMMAND来接收本通知消息

4.按键消息


WM_KEYFIRST:--------->用于WinCE系统,本消息在使用GetMessage和PeekMessage函数时,用于过滤键盘消息
WM_KEYDOWN:--------->当一个非系统按键被按下时(<ALT>键没有被按下),会发送本消息给拥有键盘焦点的窗口
WM_KEYUP:--------->当一个非系统按键被释放弹起时(<ALT>键没有被按下),会发送本消息给拥有键盘焦点的窗口
WM_CHAR:--------->按下某按键,并已发出WM_KEYDOWN、WM_KEYUP消息,本消息包含被按下的按键的字符码
WM_DEADCHAR:--------->\"死字符\"消息,当使用TranslateMessage函数翻译WM_KEYUP消息时,发送本消息给拥有键盘焦点的窗口,注:德语键盘上,有些按键只是给字符添加音标的,并不产生字符,故称\"死字符\"
WM_SYSKEYDOWN:--------->当用户按住<ALT>键的同时又按下其它键时,发送本消息给拥有焦点的窗口
WM_SYSKEYUP:--------->当用户释放一个按键的同时<ALT>键还按着时,发送本消息给拥有焦点的窗口
WM_SYSCHAR:--------->当WM_SYSKEYDOWN消息被TranslateMessage函数翻译后,发送本消息给拥有焦点的窗口,注:<ALT>键被按下
WM_SYSDEADCHAR:--------->\"死字符\"消息,当使用TranslateMessage函数翻译WM_SYSKEYDOWN消息时,发送本消息给拥有键盘焦点的窗口,注:德语键盘上,有些按键只是给字符添加音标的,并不产生字符,故称\"死字符\"
WM_KEYLAST:--------->用于WinCE系统,本消息在使用GetMessage和PeekMessage函数时,用于过滤键盘消息
WM_IME_STARTCOMPOSITION:--------->当用户开始输入编码时,系统立即发送该消息到IME中,IME打开编码窗口,注:输入法相关
WM_IME_ENDCOMPOSITION:--------->当编码结束时,IME发送本消息,用户程序可接受本消息,以便自己显示用户输入的编码,注:输入法相关
WM_IME_COMPOSITION:--------->当用户改变了编码状态时,发送本消息,应用程序可通过调用ImmGetCompositionString函数获取新的编码状态
WM_IME_KEYLAST:--------->当用户改变了编码状态时,发送本消息,应用程序可通过调用ImmGetCompositionString函数获取新的编码状态

5.系统菜单等消息


WM_INITDIALOG:--------->在某对话框程序被显示前发送本消息给该对话框程序,通常用本消息对控件进行一些初始化工作和执行其它任务

WM_COMMAND:--------->用户选择一条菜单命令项或某控件发送一条通知消息给其父窗,或某快捷键被翻译时,本消息被发送
WM_SYSCOMMAND:--------->当用户选择一条系统菜单命令、用户最大化或最小化或还原或关闭时,窗口会收到本消息
WM_TIMER:--------->发生了定时器事件
WM_HSCROLL:--------->当窗口的标准水平滚动条产生一个滚动事件时,发送本消息给该窗口
WM_VSCROLL:--------->当窗口的标准垂直滚动条产生一个滚动事件时,发送本消息给该窗口
WM_INITMENU:--------->当一个菜单将被激活时发送本消息,它发生在用户点击了某菜单项或按下某菜单键。它允许程序在显示前更改菜单
WM_INITMENUPOPUP:--------->当一个下拉菜单或子菜单将被激活时发送本消息,它允许程序在它显示前更改菜单,却不更改全部菜单
WM_SYSTIMER:--------->系统用来通知光标跳动的一个消息
WM_MENUSELECT:--------->当用户选择一条菜单项时,发送本消息给菜单的所有者(一般是窗口)
WM_MENUCHAR:--------->当菜单已被激活且用户按下了某菜单字符键(菜单字符键用括号括着、带下划线,不同于快捷键),发送本消息给菜单的所有者
WM_ENTERIDLE:--------->当一个模态对话框或菜单进入空闲状态时,发送本消息给它的所有者,一个模态对话框或菜单进入空闲状态就是在处理完一条或几条先前的消息后,没有消息在消息列队中等待
WM_MENURBUTTONUP:--------->本消息允许程序为菜单项提供一个感知上下文的菜单(即快捷菜单),要为菜单项显示一下上下文菜单,请使用TPM_RECURSE标识调用TrackPopupMenuEx函数
WM_MENUDRAG:--------->当用户拖动菜单项时,发送本消息给拖放菜单的拥有者,可让菜单支持拖拽,可使用OLE拖放传输协议启动拖放操作,注:菜单要具有MNS_DRAGDROP风格
WM_MENUGETOBJECT:--------->当鼠标光标进入或离开菜单项时,本消息发送给支持拖放的菜单的拥有者,相关结构体:MENUGETOBJECTINFO,注:菜单要具有MNS_DRAGDROP风格
WM_UNINITMENUPOPUP:--------->当一条下拉菜单或子菜单被销毁时,发送本消息
WM_MENUCOMMAND:--------->当用户在一个菜单上作出选择时,会发送本消息,菜单要具有MNS_NOTIFYBYPOS风格(在MENUINFO结构体中设置)
WM_CTLCOLORMSGBOX:--------->系统绘制消息框前发送本消息给消息框的所有者窗口,通过响应本消息,所有者窗口可通过使用给定的相关显示设备的句柄来设置消息框的文本和背景色
WM_CTLCOLOREDIT:--------->当一个编辑框控件将要被绘制时,发送本消息给其父窗;通过响应本消息,所有者窗口可通过使用给定的相关显示设备的句柄来设置编辑框的文本和背景色
WM_CTLCOLORLISTBOX:--------->当一个列表框控件将要被绘制前,发送本消息给其父窗;通过响应本消息,所有者窗口可通过使用给定的相关显示设备的句柄来设置列表框的文本和背景色
WM_CTLCOLORBTN:--------->设置按钮的背景色
WM_CTLCOLORDLG:--------->设置对话框的背景色,通常是在WinnApp中使用SetDialogBkColor函数实现
WM_CTLCOLORSCROLLBAR:--------->设置滚动条的背景色
WM_CTLCOLORSTATIC:--------->设置一个静态控件的背景色

6.组合框控件消息


CB_GETEDITSEL:--------->用于取得组合框所包含编辑框子控件中当前被选中的字符串的起止位置,对应函数:GetEditSel
CB_LIMITTEXT:--------->用于限制组合框所包含编辑框子控件输入文本的长度
CB_SETEDITSEL:--------->用于选中组合框所包含编辑框子控件中的部分字符串,对应函数:GetEditSel
CB_ADDSTRING:--------->用于向组合框控件追加一个列表项(字符串)
CB_DELETESTRING:--------->用于删除组合框中指定的列表项(字符串)
CB_DIR:--------->用于向组合框控件所包含的列表框控件中添加一个文件名列表清单
CB_GETCOUNT:--------->用于返回组合框控件中列表项的总项数
CB_GETCURSEL:--------->用于返回当前被选择项的索引
CB_GETLBTEXT:--------->获取组合框控件中指定列表项的字符串
CB_GETLBTEXTLEN:--------->用于返回组合框控件中指定列表项的字符串的长度(不包括结束符0)
CB_INSERTSTRING:--------->在组合框控件所包含的列表框子控件中的指定位置插入字符串
CB_RESETCONTENT:--------->用于清除组合框控件所有列表项
CB_FINDSTRING:--------->在组合框控件中根据给定的字符串查找匹配字符串(忽略大小写)
CB_SELECTSTRING:--------->在组合框控件中设定与指定字符串相匹配的列表项为选中项
CB_SETCURSEL:--------->在组合框控件中设置指定的列表项为当前选择项
CB_SHOWDROPDOWN:--------->用于显示或关闭下拉式和下拉列表式组合框的列表框
CB_GETITEMDATA:--------->组合框控件每个列表项都有一个32位的附加数据,本消息用于返回指定列表项的附加数据
CB_SETITEMDATA:--------->用于更新组合框所包含的列表框所指定的列表项的32位附加数据
CB_GETDROPPEDCONTROLRECT:--------->用于取组合框中列表框的屏幕位置
CB_SETITEMHEIGHT:--------->指定组合框中列表项的显示高度(像素点)
CB_GETITEMHEIGHT:--------->用于返回指定列表项的高度(像素点)
CB_SETEXTENDEDUI:--------->指定下拉式或下拉列表式组合框是使用默认界面还是扩展界面
CB_GETEXTENDEDUI:--------->用于返回组合框是否存在扩展界面
CB_GETDROPPEDSTATE:--------->用于取组合框中列表框是否可见
CB_FINDSTRINGEXACT:--------->在组合框中查找字符串,忽略大小写,与CB_FINDSTRING不同,本消息必须整个字符串相同
CB_SETLOCALE:--------->设置组合框列表项当前用于排序的语言代码
CB_GETLOCALE:--------->获取组合框列表项当前用于排序的语言代码
CB_GETTOPINDEX:--------->获取组合框中列表框中第一个可见项的索引
CB_SETTOPINDEX:--------->用于将指定的组合框中列表项设置为列表框的第一个可见项
CB_GETHORIZONTALEXTENT:--------->用于返回组合框水平滚动的总宽度(像素点)(要具有水平滚动条)
CB_SETHORIZONTALEXTENT:--------->用于设定组合框中的列表框的宽度
CB_GETDROPPEDWIDTH:--------->取组合框中列表框的宽度(像素点)
CB_SETDROPPEDWIDTH:--------->用于设定组合框中的列表框的最大允许宽度
CB_INITSTORAGE:--------->只适用于Win95,当将要向组合框中列表框中加入大量表项时,本消息将预先分配一块内存,以免大量添加表项多次分配内存,从而加快程序运行速度
CB_MSGMAX:--------->该消息还具有三个消息值:0x0162,0x0163,0x0165,消息含义不明,搜索了整个Visual Studio 6的目录也只有其定义,却未见其使用的相关代码

7.组合框控件通知消息


CBN_CLOSEUP:--------->通知父窗(通过WM_COMMAND获知),组合框的列表框被关闭
CBN_DBLCLK:--------->通知父窗(通过WM_COMMAND获知),用户双击了组合框中的一个字符串
CBN_DROPDOWN:--------->通知父窗(通过WM_COMMAND获知),组合框的列表框被弹出
CBN_EDITCHANGE:--------->通知父窗(通过WM_COMMAND获知),用户修改了组合框所含编辑框中的文本
CBN_EDITUPDATE:--------->通知父窗(通过WM_COMMAND获知),组合框所含编辑框内的文本即将更新
CBN_ERRSPACE:--------->通知父窗(通过WM_COMMAND获知),组合框内存不足
CBN_KILLFOCUS:--------->通知父窗(通过WM_COMMAND获知),组合框失去输入焦点
CBN_SELCHANGE:--------->通知父窗(通过WM_COMMAND获知),选择了组合框中的一项
CBN_SELENDCANCEL:--------->通知父窗(通过WM_COMMAND获知),用户对组合框的选择应当被取消
CBN_SELENDOK:--------->通知父窗(通过WM_COMMAND获知),用户对组合框的选择是合法的
CBN_SETFOCUS:--------->通知父窗(通过WM_COMMAND获知),组合框获得输入焦点

8.列表框控件消息


LB_ADDSTRING:--------->向列表框中添加字符串
LB_INSERTSTRING:--------->向列表框中插入一个条目数据或字符串。不像LB_ADDSTRING消息,该消息不会激活LBS_SORT样式来对条目进行排序
LB_DELETESTRING:--------->删除列表框中的一个字符串
LB_SELITEMRANGEEX:--------->在多选状态下的列表框中选择一个或多个连续的条目
LB_RESETCONTENT:--------->清除列表框中所有列表项
LB_SETSEL:--------->在多选状态下的列表框中选择一个字符串
LB_SETCURSEL:--------->在列表框中选择一个字符串,并将其所在的条目滚动到视野内,并高亮新选中的字符串
LB_GETSEL:--------->获得列表框中一个条目的选择状态
LB_GETCURSEL:--------->获得列表框中当前被选条目的索引。仅在单选状态的列表框有效
LB_GETTEXT:--------->从列表框中获得一个字符串
LB_GETTEXTLEN:--------->获得一个列表框中字符串的长度
LB_GETCOUNT:--------->获得列表框中条目的数量
LB_SELECTSTRING:--------->仅适用于单选择列表框,设定与指定字符串相匹配的列表项为选中项,会滚动列表框以使选择项可见
LB_DIR:--------->在列表框中列出文件名
LB_GETTOPINDEX:--------->返回列表框中第一个可见项的索引
LB_FINDSTRING:--------->在列表框中查找匹配字符串(忽略大小写)
LB_GETSELCOUNT:--------->仅用于多重选择列表框,本消息用于返回选择项的数目
LB_GETSELITEMS:--------->仅用于多重选择列表框,本消息用于获得选中项的数目及位置
LB_SETTABSTOPS:--------->设置列表框的光标(输入焦点)站数及索引顺序表
LB_GETHORIZONTALEXTENT:--------->返回列表框的可滚动的宽度(像素点)
LB_SETHORIZONTALEXTENT:--------->本消息设置列表框的滚动宽度
LB_SETCOLUMNWIDTH:--------->为列表框指定列数
LB_ADDFILE:--------->为列表框增加文件名
LB_SETTOPINDEX:--------->用于列表框将中指定的列表项设置为列表框的第一个可见项,会将列表框滚动到合适的位置
LB_GETITEMRECT:--------->用于列表框中获得列表项的客户区的RECT
LB_GETITEMDATA:--------->列表框中每个列表项都有个32位附加数据,本消息用于返回指定列表项的附加数据
LB_SETITEMDATA:--------->用于更新列表框中指定列表项的32位附加数据
LB_SELITEMRANGE:--------->仅用于多重选择列表框,用来使指定范围内的列表项选中或落选
LB_SETANCHORINDEX:--------->用于列表框中设置鼠标最后选中的表项成指定表项
LB_GETANCHORINDEX:--------->用于列表框中鼠标最后选中的项的索引
LB_SETCARETINDEX:--------->用于列表框中设置键盘输入焦点到指定表项
LB_GETCARETINDEX:--------->用于列表框中返回具有矩形焦点的项目索引
LB_SETITEMHEIGHT:--------->用于列表框中指定列表项显示高度
LB_GETITEMHEIGHT:--------->用于列表框中返回列表框中某一项的高度(像素点)
LB_FINDSTRINGEXACT:--------->用于列表框中查找字符串(忽略大小写),与LB_FINDSTRING不同,本消息必须整个字符串相同
LB_SETLOCALE:--------->用于列表框中设置列表项当前用于排序的语言代码,当用户使用LB_ADDSTRING向组合框中的列表框中添加记录,并使用LBS_SORT风格进行重新排序时,必须使用该语言代码
LB_GETLOCALE:--------->用于列表框中获取列表项当前用于排序的语言代码,当用户使用LB_ADDSTRING向组合框中的列表框中添加记录,并使用LBS_SORT风格进行重新排序时,必须使用该语言代码
LB_SETCOUNT:--------->用于列表框中设置表项数目
LB_INITSTORAGE:--------->只适用于Win95版本,当将要向列表框中加入大量表项时,本消息将预先分配一块内存,以免在以后的操作中一次次分配内存
LB_ITEMFROMPOINT:--------->用于列表框中获得与指定点最近的项目索引
LB_MSGMAX:--------->该消息还具有三个消息值:0x01B0,0x01B1,0x01B3,,消息含义不明,搜索了整个Visual Studio 6的目录也只有其定义,却未见其使用的相关代码

9.列表框控件通知消息


LBN_DBLCLK:--------->通知父窗(通过WM_COMMAND获知),用户双击了列表框中的一项
LBN_ERRSPACE:--------->通知父窗(通过WM_COMMAND获知),列表框内存不够
LBN_KILLFOCUS:--------->通知父窗(通过WM_COMMAND获知),列表框正在失去输入焦点
LBN_SELCANCEL:--------->通知父窗(通过WM_COMMAND获知),选择被取消
LBN_SELCHANGE:--------->通知父窗(通过WM_COMMAND获知),选择了列表框中的另一项
LBN_SETFOCUS:--------->通知父窗(通过WM_COMMAND获知),列表框获得输入焦点

10.鼠标消息

WM_MOUSEFIRST:--------->鼠标移动时发生(与WM_MOUSEMOVE等值),常用于判断鼠标消息的范围,比如:if(message >= WM_MOUSEFIRST)&&(message <= WM_MOUSELAST)
WM_MOUSEMOVE:--------->移动鼠标
WM_LBUTTONDOWN:--------->按下鼠标左键
WM_LBUTTONUP:--------->释放鼠标左键
WM_LBUTTONDBLCLK:--------->双击鼠标左键
WM_RBUTTONDOWN:--------->按下鼠标右键
WM_RBUTTONUP:--------->释放鼠标右键
WM_RBUTTONDBLCLK:--------->双击鼠标右键
WM_MBUTTONDOWN:--------->按下鼠标中键
WM_MBUTTONUP:--------->释放鼠标中键
WM_MBUTTONDBLCLK:--------->双击鼠标中键

WM_MOUSEHOVER:--------->鼠标移过控件时,触发发送本消息
WM_MOUSELEAVE:--------->鼠标离开控件时,触发发送本消息
WM_MOUSEWHEEL:--------->当鼠标轮子转动时,发送本消息给当前拥有焦点的控件
WM_MOUSELAST:--------->WM_MBUTTONDBLCLK的别名,通常用于判断鼠标消息的范围,对应的还有WM_MOUSEFIRST,例如:if(message > =  WM_MOUSEFIRST)&&(message <= WM_MOUSELAST)

11.窗口相关消息


WM_PARENTNOTIFY:--------->当MDI子窗口被创建或被销毁,或用户按了一下鼠标键而光标在子窗口上时,发送本消息给其父窗
WM_ENTERMENULOOP:--------->发送本消息通知应用程序的主窗口已进入菜单循环模式
WM_EXITMENULOOP:--------->发送本消息通知应用程序的主窗口已退出菜单循环模式
WM_NEXTMENU:--------->当使用左箭头光标键或右箭头光标键在菜单条与系统菜单之间切换时,会发送本消息给应用程序,相关结构体:MDINEXTMENU
WM_SIZING:--------->当用户正在调整窗口大小时,发送本消息给窗口;通过本消息应用程序可监视窗口大小和位置,也可修改它们
WM_CAPTURECHANGED:--------->当它失去捕获的鼠标时,发送本消息给窗口
WM_MOVING:--------->当用户在移动窗口时发送本消息,通过本消息应用程序以监视窗口大小和位置,也可修改它们
WM_POWERBROADCAST:--------->本消息发送给应用程序来通知它有关电源管理事件,比如待机休眠时会发送本消息
WM_DEVICECHANGE:--------->当设备的硬件配置改变时,发送本消息给应用程序或设备驱动程序
WM_MDICREATE:--------->发送本消息给多文档应用程序的客户窗口来创建一个MDI子窗口
WM_MDIDESTROY:--------->发送本消息给多文档应用程序的客户窗口来关闭一个MDI子窗口
WM_MDIACTIVATE:--------->发送本消息给多文档应用程序的客户窗口通知客户窗口激活另一个MDI子窗口,当客户窗口收到本消息后,它发出WM_MDIACTIVE消息给MDI子窗口(未激活)来激活它
WM_MDIRESTORE:--------->发送本消息给MDI客户窗口,让子窗口从最大最小化恢复到原来的大小
WM_MDINEXT:--------->发送本消息给MDI客户窗口,激活下一个或前一个窗口
WM_MDIMAXIMIZE:--------->发送本消息给MDI客户窗口来最大化一个MDI子窗口
WM_MDITILE:--------->发送本消息给MDI客户窗口,以平铺方式重新排列所有MDI子窗口
WM_MDICASCADE:--------->发送本消息给MDI客户窗口,以层叠方式重新排列所有MDI子窗口
WM_MDIICONARRANGE:--------->发送本消息给MDI客户窗口重新排列所有最小化的MDI子窗口
WM_MDIGETACTIVE:--------->发送本消息给MDI客户窗口以找到激活的子窗口句柄
WM_MDISETMENU:--------->发送本消息给MDI客户窗口,用MDI菜单代替子窗口的菜单
WM_ENTERSIZEMOVE:--------->当某窗口进入移动或调整大小的模式循环时,本消息发送到该窗口
WM_EXITSIZEMOVE:--------->确定用户改变窗口大小或改变窗口位置的事件是何时完成的
WM_DROPFILES:--------->鼠标拖放时,放下事件产生时发送本消息,比如:文件拖放功能
WM_MDIREFRESHMENU:--------->发送本消息给多文档应用程序的客户窗口,根据当前MDI子窗口更新MDI框架窗口的菜单

12.输入法相关消息


WM_IME_SETCONTEXT:--------->应用程序的窗口激活时,系统将向应用程序发送WM_IME_SETCONTEXT消息,注:输入法相关
WM_IME_NOTIFY:--------->可使用WM_IME_NOTIFY消息来通知关于IME窗口状态的常规改变,注:输入法相关
WM_IME_CONTROL:--------->可使用WM_IME_CONTROL消息来改变字母组合窗口的位置,注:输入法相关
WM_IME_COMPOSITIONFULL:--------->用户接口窗口不能增加编码窗口的尺寸时,IME用户接口窗口将发送WM_IME_COMPOSITIONFULL消息,可不处理,注:输入法相关
WM_IME_SELECT:--------->系统发出WM_IME_SELECT以便选择一个新的IME输入法,注:输入法相关
WM_IME_CHAR:--------->当打开输入法输入文字时,会发送WM_IME_CHAR消息
WM_IME_REQUEST:--------->应用程序请求输入法时,触发发送本消息
WM_IME_KEYDOWN:--------->在输入法录字窗口中按下按键时,触发发送本消息
WM_IME_KEYUP:--------->在输入法录字窗口中释放按键时,触发发送本消息

13.剪贴板相关消息


WM_CUT:--------->应用程序发送本消息给一个编辑框或组合框来删除当前选择的文本
WM_COPY:--------->应用程序发送本消息给一个编辑框或组合框,以便用CF_TEXT格式复制当前选择的文本到剪贴板
WM_PASTE:--------->应用程序发送本消息给编辑框或组合框,以便从剪贴板中得到数据
WM_CLEAR:--------->应用程序发送本消息给编辑框或组合框,以清除当前选择的内容
WM_UNDO:--------->应用程序发送本消息给编辑框或组合框,以撤消最后一次操作
WM_RENDERFORMAT:--------->应用程序需要系统剪切板数据时,触发发送本消息
WM_RENDERALLFORMATS:--------->应用程序退出时在程序退出时,系统会给当前程序发送该消息,要求提供所有格式的剪帖板数据,避免造成数据丢失
WM_DESTROYCLIPBOARD:--------->当调用EmptyClipboard函数时,发送本消息给剪贴板的所有者
WM_DRAWCLIPBOARD:--------->当剪贴板的内容变化时,发送本消息给剪贴板观察链的首个窗口;它允许用剪贴板观察窗口来显示剪贴板的新内容
WM_PAINTCLIPBOARD:--------->当剪贴板包含CF_OWNERDIPLAY格式的数据,并且剪贴板观察窗口的客户区需要重画时,触发发送本消息
WM_VSCROLLCLIPBOARD:--------->当剪贴板查看器的垂直滚动条被单击时,触发发送本消息
WM_SIZECLIPBOARD:--------->当剪贴板包含CF_OWNERDIPLAY格式的数据,并且剪贴板观察窗口的客户区域的大小已改变时,本消息通过剪贴板观察窗口发送给剪贴板的所有者
WM_ASKCBFORMATNAME:--------->通过剪贴板观察窗口发送本消息给剪贴板的所有者,以请求一个CF_OWNERDISPLAY格式的剪贴板的名字
WM_CHANGECBCHAIN:--------->当一个窗口从剪贴板观察链中移去时,发送本消息给剪贴板观察链的首个窗口
WM_HSCROLLCLIPBOARD:--------->本消息通过一个剪贴板观察窗口发送给剪贴板的所有者,它发生在当剪贴板包含CFOWNERDISPALY格式的数据,并且有个事件在剪贴板观察窗的水平滚动条上,所有者应滚动剪贴板图像并更新滚动条的值

14.其他消息


WM_QUERYNEWPALETTE:--------->本消息发送给将要收到焦点的窗口,本消息能使窗口在收到焦点时同时有机会实现逻辑调色板
WM_PALETTEISCHANGING:--------->当一个应用程序正要实现它的逻辑调色板时,发本消息通知所有的应用程序
WM_PALETTECHANGED:--------->本消息在一个拥有焦点的窗口实现它的逻辑调色板后,发送本消息给所有顶级并重叠的窗口,以此来改变系统调色板
WM_HOTKEY:--------->当用户按下由RegisterHotKey函数注册的热键时,发送本消息
WM_PRINT:--------->发送本消息给一个窗口请求在指定的设备上下文中绘制自身,可用于窗口截图,但对子控件截图时得到的是与子控件等大的黑块
WM_PRINTCLIENT:--------->送本消息给一个窗口请求在指定的设备上下文中绘制其客户区(最通常是在一个打印机设备上下文中)
WM_HANDHELDFIRST:--------->消息含义未知,搜索了整个Visual Studio 6的目录也只有其定义,却未见其使用的相关代码
WM_HANDHELDLAST:--------->消息含义未知,搜索了整个Visual Studio 6的目录也只有其定义,却未见其使用的相关代码
WM_AFXFIRST:--------->指定首个AFX消息(MFC)
WM_QUERYAFXWNDPROC:--------->该消息被MFC内部用来确认窗口过程是否使用AfxWndProc
WM_SIZEPARENT:--------->MFC自定义的消息,MFC的主窗口框架布局是通过给子窗口发送响应WM_SIZEPARENT来完成的,框架窗口发送本消息用的是SendMessage,各个控制子窗口用OnSizeParent响应WM_SIZEPARENT消息
WM_IDLEUPDATECMDUI:--------->MFC自己定义和使用的消息,当应用程序进入空闲处理状态时,将发送本消息,导致所有工具栏用户对象的状态处理函数被调用,从而改变其状态,对应的消息响应函数为:OnIdleUpdateCmdUI
WM_INITIALUPDATE:--------->MFC发明的消息,用于处理菜单、快捷键,发送WM_INITIALUPDATE消息给所有子窗口,消息响应函数为:CView::OnInitialUpdate
WM_COMMANDHELP:--------->本消息用于实现MFC的上下文敏感帮助,按下<F1键>后消息被映射到CWinApp::OnHelp。该函数会向最外层框架窗口发送本消息,本消息响应过程是自顶向下的,对应的消息响应函数为:ON_WM_HELPINFO
WM_HELPHITTEST:--------->本消息用于实现MFC的上下文敏感帮助,本消息必须手工添加
WM_EXITHELPMODE:--------->本消息用于实现MFC的上下文敏感帮助,本消息必须手工添加
WM_RECALCPARENT:--------->MFC自己定义和使用的消息,对应的消息响应函数为:CMainFrame::OnReCalcParent,本消息由CView发送给CMainFrame框架窗口以便重新布置窗口
WM_SIZECHILD:--------->MFC自己定义和使用的消息,当用户重新调整COleResizeBar的大小时,由COleResizeBar发送给其所有者窗口:--------->,
WM_KICKIDLE:--------->本消息是MFC中对空闲进行处理的一个未公开的消息,消息泵并不处理WM_KICKIDLE消息,收到该消息后,直接返回,WM_KICKIDLE被用来刺激空闲处理的执行,它作为一个空消息促使::GetMessage()返回
WM_QUERYCENTERWND:--------->MFC内部保留的未公开消息,lParam:HWND to use as centering parent;
WM_DISABLEMODAL:--------->MFC内部保留的未公开消息,lResult = 0,disable during modal state;lResult = 1,don't disable
WM_FLOATSTATUS:--------->MFC内部保留的未公开消息,wParam combination of FS_* flags below
WM_ACTIVATETOPLEVEL:--------->MFC内部保留的未公开消息,wParam = nState(like WM_ACTIVATE);lParam = pointer to HWND[2];lParam[0] = hWnd getting WM_ACTIVATE;lParam[1] = 
hWndOther
WM_QUERY3DCONTROLS:--------->MFC内部保留的未公开消息,lResult != 0 if 3D controls wanted
WM_RESERVED_0370:--------->MFC内部保留的未公开、MFC自身也未使用的消息
WM_RESERVED_0371:--------->MFC内部保留的未公开、MFC自己也未使用的消息
WM_RESERVED_0372:--------->MFC内部保留的未公开、MFC自己也未使用的消息
WM_SOCKET_NOTIFY:--------->已在MSDN中公开的MFC内部消息,本消息告诉socket窗口socket事件已经发生(socket窗口:CSocketWnd,隐藏,接收本消息,响应:OnSocketNotify):--------->,
WM_SOCKET_DEAD:--------->MFC内部消息,MFC维护死套接字的映射,死套接字是个已关闭的套接字,参见sockcore.cpp
WM_SETMESSAGESTRING:--------->MFC内部消息,发送给框架窗口要求其更新状态栏字符串信息,微软MFC TN024文档中有该消息的描述,响应函数:OnSetMessageString
WM_POPMESSAGESTRING:--------->MFC内部消息,用来重新设置状态栏,对应的字符串是\"Ready\响应函数:OnPopMessageString
WM_HELPPROMPTADDR:--------->MFC内部消息,用来从相关联的框架窗口中检索m_dwPromptContext地址,注:<F1>上下文帮助相关
WM_OCC_LOADFROMSTREAM:--------->MFC内部消息,OCC即OLE control containers,参见相关LoadFromStream函数
WM_OCC_LOADFROMSTORAGE:--------->MFC内部消息,OCC即OLE control container,参见相关LoadFromStorage函数
WM_OCC_INITNEW:--------->MFC内部消息,OCC即OLE control container,参见相关InitNew函数
WM_OCC_LOADFROMSTREAM_EX:--------->MFC内部消息,OCC即OLE control container,参见相关LoadFromStreamEx函数
WM_OCC_LOADFROMSTORAGE_EX:--------->MFC内部消息,OCC即OLE control container,参见:ATLHOST.H/OCCMGR.CPP/WINCORE.CPP中相关代码
WM_QUEUE_SENTINEL:--------->MFC内部消息,用于重排消息队列,\"QUEUE SENTINEL\"意为消息哨兵
WM_RESERVED_037C:--------->MFC内部保留,供将来使用
WM_RESERVED_037D:--------->MFC内部保留,供将来使用
WM_RESERVED_037E:--------->MFC内部保留,供将来使用
WM_FORWARDMSG:--------->ATL中定义,让一个窗口接收的消息传递给另一个窗口进行处理
WM_AFXLAST:--------->指定末个afx消息
WM_PENWINFIRST:--------->指定首个Pen Window消息,参见:PENWIN.H/WINUSER.H
WM_PENWINLAST:--------->指定末个Pen Window消息,参见:PENWIN.H/WINUSER.H

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值