MFC应用程序中处理消息以及wMsg消息大全

MFC应用程序中处理消息的顺序

1.AfxWndProc()       该函数负责接收消息,找到消息所属的CWnd对象,然后调用AfxCallWndProc

2.AfxCallWndProc()   该函数负责保存消息(保存的内容主要是消息标识符和消息参数)供应用程序以后使用,然后调用WindowProc()函数

3.WindowProc()             该函数负责发送消息到OnWndMsg()函数,如果未被处理,则调用DefWindowProc()函数
4.OnWndMsg()                 该函数的功能首先按字节对消息进行排序,对于WM_COMMAND消息,调用OnCommand()消息响应函数,对于WM_NOTIFY消息调用OnNotify()消息响应函数。任何被遗漏的消息将是一个窗口消息。OnWndMsg()函数搜索类的消息映像,以找到一个能处理任何窗口消息的处理函数。如果OnWndMsg()函数不能找到这样的处理函数的话,则把消息返回到WindowProc()函数,由它将消息发送给DefWindowProc()函数
5.OnCommand()             该函数查看这是不是一个控件通知(lParam参数不为NULL,如果lParam参数为空的话,说明该消息不是控件通知),如果它是,OnCommand()函数会试图将消息映射到制造通知的控件;如果他不是一个控件通知(或者如果控件拒绝映射的消息)OnCommand()就会调用OnCmdMsg()函数
6.OnCmdMsg()                 根据接收消息的类,OnCmdMsg()函数将在一个称为命令传递(Command Routing)的过程中潜在的传递命令消息和控件通知。例如:如果拥有该窗口的类是一个框架类,则命令和通知消息也被传递到视图和文档类,并为该类寻找一个消息处理函数

MFC应用程序创建窗口的过程
1.PreCreateWindow()     该函数是一个重载函数,在窗口被创建前,可以在该重载函数中改变创建参数(可以设置窗口风格等等)
2.PreSubclassWindow() 这也是一个重载函数,允许首先子分类一个窗口
3.OnGetMinMaxInfo()     该函数为消息响应函数,响应的是WM_GETMINMAXINFO消息,允许设置窗口的最大或者最小尺寸
4.OnNcCreate()                 该函数也是一个消息响应函数,响应WM_NCCREATE消息,发送消息以告诉窗口的客户区即将被创建
5.OnNcCalcSize()             该函数也是消息响应函数,响应WM_NCCALCSIZE消息,作用是允许改变窗口客户区大小
6.OnCreate()                     该函数也是一个消息响应函数,响应WM_CREATE消息,发送消息告诉一个窗口已经被创建
7.OnSize()                         该函数也是一个消息响应函数,响应WM_SIZE消息,发送该消息以告诉该窗口大小已经发生变化

8.OnMove()                         消息响应函数,响应WM_MOVE消息,发送此消息说明窗口在移动
9.OnChildNotify()         该函数为重载函数,作为部分消息映射被调用,告诉父窗口即将被告知一个窗口刚刚被创建

MFC应用程序关闭窗口的顺序(非模态窗口)
1.OnClose()             消息响应函数,响应窗口的WM_CLOSE消息,当关闭按钮被单击的时候发送此消息
2.OnDestroy()         消息响应函数,响应窗口的WM_DESTROY消息,当一个窗口将被销毁时,发送此消息
3.OnNcDestroy()     消息响应函数,响应窗口的WM_NCDESTROY消息,当一个窗口被销毁后发送此消息
4.PostNcDestroy() 重载函数,作为处理OnNcDestroy()函数的最后动作,被CWnd调用

MFC应用程序中打开模式对话框的函数调用顺序
1.DoModal()                         重载函数,重载DoModal()成员函数
2.PreSubclassWindow()     重载函数,允许首先子分类一个窗口
3.OnCreate()                         消息响应函数,响应WM_CREATE消息,发送此消息以告诉一个窗口已经被创建
4.OnSize()                             消息响应函数,响应WM_SIZE消息,发送此消息以告诉窗口大小发生变化
5.OnMove()                             消息响应函数,响应WM_MOVE消息,发送此消息,以告诉窗口正在移动
6.OnSetFont()                     消息响应函数,响应WM_SETFONT消息,发送此消息,以允许改变对话框中控件的字体
7.OnInitDialog()                 消息响应函数,响应WM_INITDIALOG消息,发送此消息以允许初始化对话框中的控件,或者是创建新控件
8.OnShowWindow()                 消息响应函数,响应WM_SHOWWINDOW消息,该函数被ShowWindow()函数调用
9.OnCtlColor()                     消息响应函数,响应WM_CTLCOLOR消息,被父窗口发送已改变对话框或对话框上面控件的颜色
10. OnChildNotify()         重载函数,作为WM_CTLCOLOR消息的结果发送

MFC应用程序中关闭模式对话框的顺序
1.OnClose()                 消息响应函数,响应WM_CLOSE消息,当"关闭"按钮被单击的时候,该函数被调用
2.OnKillFocus()         消息响应函数,响应WM_KILLFOCUS消息,当一个窗口即将失去键盘输入焦点以前被发送
3.OnDestroy()             消息响应函数,响应WM_DESTROY消息,当一个窗口即将被销毁时,被发送
4.OnNcDestroy()         消息响应函数,响应WM_NCDESTROY消息,当一个窗口被销毁以后被发送
5.PostNcDestroy()     重载函数,作为处理OnNcDestroy()函数的最后动作被CWnd调用

打开无模式对话框的顺序
1.PreSubclassWindow()         重载函数,允许用户首先子分类一个窗口
2.OnCreate()                         消息响应函数,响应WM_CREATE消息,发送此消息以告诉一个窗口已经被创建
3.OnSize()                             消息响应函数,响应WM_SIZE消息,发送此消息以告诉窗口大小发生变化
4.OnMove()                             消息响应函数,响应WM_MOVE消息,发送此消息以告诉窗口正在移动
5.OnSetFont()                         消息响应函数,响应WM_SETFONT消息,发送此消息以允许改变对话框中控件的字体


以上这些的执行都是按给定的顺序执行!只有清楚的了解应用程序的执行顺序,才能在编写代码的时候知道,在什么时候应该执行什么,以及在什么地方该处理什么!

 

MFC的一些主要成员函数

CWinThread::m_pMainWnd:保存指向应用程序的主窗口指针。

CWinThread::GetMainWnd:查询指向线程主窗口的指针。

CWinThread::InitInstance:重载以实现线程实例的初始化。

AfxGetApp:获得指向CWinApp对象的指针。

AfxGetInstanceHandle:获得当前应用程序实例的句柄。

AfxGetResourceHandle:获得应用程序资源的句柄。

AfxGetAppName:获得一个字符串指针,其中包含了应用程序的名字。另外,如果你拥有一个指向CWinApp对象的指针,可以通过m_pszExename来获得应用程序的名字。

CDocument::IsModified:标识文档从最近一次保存以来是否被修改过。

CDocument::UpdateAllViews:通知所有视图文档已被修改的消息。

CWnd::m_hWnd:指明与这个CWnd对象相关联的HWND句柄。

CWnd::Create:创建并初始化与CWnd对象相关联的子窗口。

CWnd::PreCreateWindow:在与CWnd对象相关联的窗口被创建之前调用。

CWnd::IsWindowEnabled:确定一个窗口是否允许鼠标和键盘输入。

CWnd::EnableWindow:允许或禁止鼠标和键盘输入。

CWnd::SetWindowPos:改变子窗口、弹出窗口和顶层窗口的大小、位置以及顺序。

CWnd::GetDlgItem:获得指定的对话框中具有指定ID的控件。

CWnd::UpdateData:初始化对话框或获得对话框中的数据。

CWnd::GetWindowRect:获得CWnd的屏幕坐标。

CWnd::GetDC:获得客户区的设备环境。

CWnd::RedrawWindow:更新客户区中的指定矩形或区域。

CWnd::UpdateWindow:更新客户区。

CWnd::Invalidate:使整个客户区无效。

CWnd::ShowWindow:显示或隐藏窗口。

CWnd::ClientToScreen:将给定点或显示器上矩形的客户区坐标转换为屏幕坐标。

CWnd::ScreenToClient:将给定点或显示器上矩形的屏幕坐标转换为客户坐标。

CWnd::SetWindowText:将窗口的文本或标题文字(如果有)设为指定的文本。

CWnd::SetFont:设置当前字体。

CWnd::GetDlgItemInt:将给定对话框中控件的文本转换为整数。

CWnd::SetTimer:安装一个系统定时器,当它被激活时,发送一个WM_TIMER消息。

CWnd::KillTimer:销毁一个系统定时器。

CWnd::FlashWindow:使窗口闪烁一次。

CWnd::MessageBox:创建并显示一个窗口,其中包含了应用程序提供的消息和标题


wMsg

消息,就是指Windows发出的一个通知,告诉应用程序某个事情发生了。例如,单击鼠标、改变窗口尺寸、按下键盘上的一个键都会使Windows发送一个消息给应用程序。消息本身是作为一个记录传递给应用程序的,这个记录中包含了消息的类型以及其他信息。例如,对于单击鼠标所产生的消息来说,这个记录中包含了单击鼠标时的坐标。这个记录类型叫做MSG,    

     
它是这样声明的:       
typedef     struct     tagMSG     {                     //     msg       
                   HWND             hwnd;                     /     /窗口句柄   
                   UINT             message;     /     /消息常量标识符   
                   WPARAM     wParam;     //     32位消息的特定附加信息       
                   LPARAM     lParam;     //     32位消息的特定附加信息   
                   DWORD         time;     /     /消息创建时的时间   
                   POINT         pt;     /     /消息创建时的鼠标位置   
   MSG;       
     
消息中有什么?       
是否觉得一个消息记录中的信息像希腊语一样?如果是这样,那么看一看下面的解释:       
hwnd     32位的窗口句柄。窗口可以是任何类型的屏幕对象,因为Win32能够维护大多数可视对象的句柄(窗口、对话框、按钮、编辑框等)。       
message     用于区别其他消息的常量值,这些常量可以是Window s单元中预定义的常量,也可以是自定义的常量。       
wParam     通常是一个与消息有关的常量值,也可能是窗口或控件的句柄 。       
lParam     通常是一个指向内存中数据的指针。由于W     P     a     r     a     m、l     P     a     r     a     m和P     o       n     t     e     r都是32位的,       
因此,它们之间可以相互转换。       
     
WM_NULL     =     $0000;       
WM_CREATE     =     $0001;       
应用程序创建一个窗口       
WM_DESTROY     =     $0002;       
一个窗口被销毁       
WM_MOVE     =     $0003;       
移动一个窗口       
WM_SIZE     =     $0005;       
改变一个窗口的大小       
WM_ACTIVATE     =     $0006;       
一个窗口被激活或失去激活状态;       
WM_SETFOCUS     =     $0007;       
获得焦点后       
WM_KILLFOCUS     =     $0008;       
失去焦点       
WM_ENABLE     =     $000A;       
改变enable状态       
WM_SETREDRAW     =     $000B;       
设置窗口是否能重画       
WM_SETTEXT     =     $000C;       
应用程序发送此消息来设置一个窗口的文本       
WM_GETTEXT     =     $000D;       
应用程序发送此消息来复制对应窗口的文本到缓冲区       
WM_GETTEXTLENGTH     =     $000E;       
得到与一个窗口有关的文本的长度(不包含空字符)       
WM_PAINT     =     $000F;       
要求一个窗口重画自己       
WM_CLOSE     =     $0010;       
当一个窗口或应用程序要关闭时发送一个信号       
WM_QUERYENDSESSION     =     $0011;       
当用户选择结束对话框或程序自己调用ExitWindows函数       
WM_QUIT     =     $0012;       
用来结束程序运行或当程序调用postquitmessage函数       
WM_QUERYOPEN     =     $0013;       
当用户窗口恢复以前的大小位置时,把此消息发送给某个图标       
WM_ERASEBKGND     =     $0014;       
当窗口背景必须被擦除时(例在窗口改变大小时)       
WM_SYSCOLORCHANGE     =     $0015;       
当系统颜色改变时,发送此消息给所有顶级窗口       
WM_ENDSESSION     =     $0016;       
当系统进程发出WM_QUERYENDSESSION消息后,此消息发送给应用程序,       
通知它对话是否结束       
WM_SYSTEMERROR     =     $0017;       
WM_SHOWWINDOW     =     $0018;       
当隐藏或显示窗口是发送此消息给这个窗口       
WM_ACTIVATEAPP     =     $001C;       
发此消息给应用程序哪个窗口是激活的,哪个是非激活的;       
WM_FONTCHANGE     =     $001D;       
当系统的字体资源库变化时发送此消息给所有顶级窗口       
WM_TIMECHANGE     =     $001E;       
当系统的时间变化时发送此消息给所有顶级窗口       
WM_CANCELMODE     =     $001F;       
发送此消息来取消某种正在进行的摸态(操作)       
WM_SETCURSOR     =     $0020;       
如果鼠标引起光标在某个窗口中移动且鼠标输入没有被捕获时,就发消息给某个窗口       
WM_MOUSEACTIVATE     =     $0021;       
当光标在某个非激活的窗口中而用户正按着鼠标的某个键发送此消息给当前窗口       
WM_CHILDACTIVATE     =     $0022;       
发送此消息给MDI子窗口当用户点击此窗口的标题栏,或当窗口被激活,移动,改变大小       
WM_QUEUESYNC     =     $0023;       
此消息由基于计算机的训练程序发送,通过WH_JOURNALPALYBACK的hook程序       
分离出用户输入消息       
WM_GETMINMAXINFO     =     $0024;       
此消息发送给窗口当它将要改变大小或位置;       
WM_PAINTICON     =     $0026;       
发送给最小化窗口当它图标将要被重画       
WM_ICONERASEBKGND     =     $0027;       
此消息发送给某个最小化窗口,仅当它在画图标前它的背景必须被重画       
WM_NEXTDLGCTL     =     $0028;       
发送此消息给一个对话框程序去更改焦点位置       
WM_SPOOLERSTATUS     =     $002A;       
每当打印管理列队增加或减少一条作业时发出此消息       
WM_DRAWITEM     =     $002B;       
当button,combobox,listbox,menu的可视外观改变时发送       
此消息给这些空件的所有者       
WM_MEASUREITEM     =     $002C;       
当button,     combo     box,     list     box,     list     view     control,     or     menu     item     被创建时       
发送此消息给控件的所有者       
WM_DELETEITEM     =     $002D;       
当the     list     box     或     combo     box     被销毁     或     当     某些项被删除通过LB_DELETESTRING,    LB_RESETCONTENT,     CB_DELETESTRING,     or     CB_RESETCONTENT     消息       
WM_VKEYTOITEM     =     $002E;       
此消息有一个LBS_WANTKEYBOARDINPUT风格的发出给它的所有者来响应WM_KEYDOWN消息       
WM_CHARTOITEM     =     $002F;       
此消息由一个LBS_WANTKEYBOARDINPUT风格的列表框发送给他的所有者来响应WM_CHAR消息       
WM_SETFONT     =     $0030;       
当绘制文本时程序发送此消息得到控件要用的颜色       
WM_GETFONT     =     $0031;       
应用程序发送此消息得到当前控件绘制文本的字体       
WM_SETHOTKEY     =     $0032;       
应用程序发送此消息让一个窗口与一个热键相关连       
WM_GETHOTKEY     =     $0033;       
应用程序发送此消息来判断热键与某个窗口是否有关联       
WM_QUERYDRAGICON     =     $0037;       
此消息发送给最小化窗口,当此窗口将要被拖放而它的类中没有定义图标,应用程序能返回一个图标或光标的句柄,当用户拖放图标时系统显示这个图标或光标       
WM_COMPAREITEM     =     $0039;       
发送此消息来判定combobox或listbox新增加的项的相对位置       
WM_GETOBJECT     =     $003D;       
WM_COMPACTING     =     $0041;       
显示内存已经很少了       
WM_WINDOWPOSCHANGING     =     $0046;       
发送此消息给那个窗口的大小和位置将要被改变时,来调用setwindowpos函数或其它窗口管理函数       
WM_WINDOWPOSCHANGED     =     $0047;       
发送此消息给那个窗口的大小和位置已经被改变时,来调用setwindowpos函数或其它窗口管理函数       
WM_POWER     =     $0048;(适用于16位的windows)       
当系统将要进入暂停状态时发送此消息       
WM_COPYDATA     =     $004A;       
当一个应用程序传递数据给另一个应用程序时发送此消息       
WM_CANCELJOURNAL     =     $004B;       
当某个用户取消程序日志激活状态,提交此消息给程序       
WM_NOTIFY     =     $004E;       
当某个控件的某个事件已经发生或这个控件需要得到一些信息时,发送此消息给它的父窗口       
WM_INPUTLANGCHANGEREQUEST     =     $0050;       
当用户选择某种输入语言,或输入语言的热键改变       
WM_INPUTLANGCHANGE     =     $0051;       
当平台现场已经被改变后发送此消息给受影响的最顶级窗口       
WM_TCARD     =     $0052;       
当程序已经初始化windows帮助例程时发送此消息给应用程序       
WM_HELP     =     $0053;       
此消息显示用户按下了F1,如果某个菜单是激活的,就发送此消息个此窗口关联的菜单,否则就       
发送给有焦点的窗口,如果当前都没有焦点,就把此消息发送给当前激活的窗口       
WM_USERCHANGED     =     $0054;       
当用户已经登入或退出后发送此消息给所有的窗口,当用户登入或退出时系统更新用户的具体       
设置信息,在用户更新设置时系统马上发送此消息;       
WM_NOTIFYFORMAT     =     $0055;       
公用控件,自定义控件和他们的父窗口通过此消息来判断控件是使用ANSI还是UNICODE结构       
在WM_NOTIFY消息,使用此控件能使某个控件与它的父控件之间进行相互通信       
WM_CONTEXTMENU     =     $007B;       
当用户某个窗口中点击了一下右键就发送此消息给这个窗口       
WM_STYLECHANGING     =     $007C;       
当调用SETWINDOWLONG函数将要改变一个或多个     窗口的风格时发送此消息给那个窗口       
WM_STYLECHANGED     =     $007D;       
当调用SETWINDOWLONG函数一个或多个     窗口的风格后发送此消息给那个窗口       
WM_DISPLAYCHANGE     =     $007E;       
当显示器的分辨率改变后发送此消息给所有的窗口       
WM_GETICON     =     $007F;       
此消息发送给某个窗口来返回与某个窗口有关连的大图标或小图标的句柄;       
WM_SETICON     =     $0080;       
程序发送此消息让一个新的大图标或小图标与某个窗口关联;       
WM_NCCREATE     =     $0081;       
当某个窗口第一次被创建时,此消息在WM_CREATE消息发送前发送;       
WM_NCDESTROY     =     $0082;       
此消息通知某个窗口,非客户区正在销毁       
WM_NCCALCSIZE     =     $0083;       
当某个窗口的客户区域必须被核算时发送此消息       
WM_NCHITTEST     =     $0084;//移动鼠标,按住或释放鼠标时发生       
WM_NCPAINT     =     $0085;       
程序发送此消息给某个窗口当它(窗口)的框架必须被绘制时;       
WM_NCACTIVATE     =     $0086;       
此消息发送给某个窗口     仅当它的非客户区需要被改变来显示是激活还是非激活状态;       
WM_GETDLGCODE     =     $0087;       
发送此消息给某个与对话框程序关联的控件,widdows控制方位键和TAB键使输入进入此控件       
通过响应WM_GETDLGCODE消息,应用程序可以把他当成一个特殊的输入控件并能处理它       

WM_NCMOUSEMOVE     =     $00A0;       
当光标在一个窗口的非客户区内移动时发送此消息给这个窗口     //非客户区为:窗体的标题栏及窗       
的边框体       
WM_NCLBUTTONDOWN     =     $00A1;       
当光标在一个窗口的非客户区同时按下鼠标左键时提交此消息       
WM_NCLBUTTONUP     =     $00A2;       
当用户释放鼠标左键同时光标某个窗口在非客户区十发送此消息;       
WM_NCLBUTTONDBLCLK     =     $00A3;       
当用户双击鼠标左键同时光标某个窗口在非客户区十发送此消息       
WM_NCRBUTTONDOWN     =     $00A4;       
当用户按下鼠标右键同时光标又在窗口的非客户区时发送此消息       
WM_NCRBUTTONUP     =     $00A5;       
当用户释放鼠标右键同时光标又在窗口的非客户区时发送此消息       
WM_NCRBUTTONDBLCLK     =     $00A6;       
当用户双击鼠标右键同时光标某个窗口在非客户区十发送此消息       
WM_NCMBUTTONDOWN     =     $00A7;       
当用户按下鼠标中键同时光标又在窗口的非客户区时发送此消息       
WM_NCMBUTTONUP     =     $00A8;       
当用户释放鼠标中键同时光标又在窗口的非客户区时发送此消息       
WM_NCMBUTTONDBLCLK     =     $00A9;       
当用户双击鼠标中键同时光标又在窗口的非客户区时发送此消息       
WM_KEYFIRST     =     $0100;       
WM_KEYDOWN     =     $0100;       
//按下一个键       
WM_KEYUP     =     $0101;       
//释放一个键       
WM_CHAR     =     $0102;       
//按下某键,并已发出WM_KEYDOWN,     WM_KEYUP消息       
WM_DEADCHAR     =     $0103;       
当用translatemessage函数翻译WM_KEYUP消息时发送此消息给拥有焦点的窗口       
WM_SYSKEYDOWN     =     $0104;       
当用户按住ALT键同时按下其它键时提交此消息给拥有焦点的窗口;       
WM_SYSKEYUP     =     $0105;       
当用户释放一个键同时ALT     键还按着时提交此消息给拥有焦点的窗口       
WM_SYSCHAR     =     $0106;       
当WM_SYSKEYDOWN消息被TRANSLATEMESSAGE函数翻译后提交此消息给拥有焦点的窗口       
WM_SYSDEADCHAR     =     $0107;       
当WM_SYSKEYDOWN消息被TRANSLATEMESSAGE函数翻译后发送此消息给拥有焦点的窗口       
WM_KEYLAST     =     $0108;       
WM_INITDIALOG     =     $0110;       
在一个对话框程序被显示前发送此消息给它,通常用此消息初始化控件和执行其它任务       
WM_COMMAND     =     $0111;       
当用户选择一条菜单命令项或当某个控件发送一条消息给它的父窗口,一个快捷键被翻译       
WM_SYSCOMMAND     =     $0112;       
当用户选择窗口菜单的一条命令或当用户选择最大化或最小化时那个窗口会收到此消息       
WM_TIMER     =     $0113;     //发生了定时器事件       
WM_HSCROLL     =     $0114;       
当一个窗口标准水平滚动条产生一个滚动事件时发送此消息给那个窗口,也发送给拥有它的控件       
WM_VSCROLL     =     $0115;       
当一个窗口标准垂直滚动条产生一个滚动事件时发送此消息给那个窗口也,发送给拥有它的控件    WM_INITMENU     =     $0116;       
当一个菜单将要被激活时发送此消息,它发生在用户菜单条中的某项或按下某个菜单键,它允许程序在显示前更改菜单       
WM_INITMENUPOPUP     =     $0117;       
当一个下拉菜单或子菜单将要被激活时发送此消息,它允许程序在它显示前更改菜单,而不要改变全部
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值