资源描述:
《MFC+消息类型(详解)》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、MFC消息类型(详解) 1、命令消息(WM_COMMAND)所有派生自CCmdTarget的类都有资格接受WM_COMMAND。2、Window消息(WM_xxx)所有派生自CWnd的类都有资格接受WM_xxx。3、控件消息(WM_NOTIFY)控件向其父窗口通知消息。三、消息处理1、WM_xxx消息处理窗口类(自身)处理→基类处理→CWnd∷DefWindowProc()处理;其所对应的宏一般为在消息WM_前面加上ON_。2、命令消息处理命令消息来自命令用户接口对象(菜单、加速键或工具栏按钮)发出的
2、WM_COMMAND消息;㈠、WM_COMMAND消息其所包含的类型和对应的宏如下:①、ON_COMMAND(ID,pfn)标准的命令消息;②、ON_COMMAND_EX(ID,pfn)多个对象对同一个命令ID的处理;其函数的原型如下:afx_msgBOOLpfn(UINTnID)说明:当返回TRUE时表示已经处理,不用在消息处理链中继续处理该命令;为FALSE时表示继续在消息处理链中处理该命令。注意:其一:在多对象处理中一定要使用该宏;其二:pfn(UINTnID)(消息处理函数)返回值将其类型voi
3、d改成BOOL,而且必须为FALSE;其三:多个对象的处理是由高层向低层的过程:即视图类→主框架窗口类→应用程序类;③、ON_COMMAND_RANGE(nID,nLastID,pfn)多个命令ID提供相同的处理;注意:其一:确保nID、nLastID的值在Resource.h中是连续的。其二:一般在函数pfn(UINTnID)中加入参数,用来确定那一个按钮点击。㈡、CN_UPDATE_COMMAND_UI消息当菜单项、工具栏按钮等[命令用户接口对象]要更新其状态时所对应的消息,它所包含的类型和对应的宏
4、如下:①、ON_UPDATE_COMMAND_UI(ID,pfn)其中函数的原型如下:afx_msgvoidpfn(CCmdUI*pCmdUI)②、ON_UPDATE_COMMAND_UI_RANGE(nID,nLastID,pfn)该函数可以处理一组[命令用户接口对象]的外观;其中函数的原型如下:afx_msgvoidpfn(CCmdUI*pCmdUI)重要:CCmdUI中的m_nID成员表示不同的ID,因此可以利用它来进行区别处理。3、控件的通知消息从控件和子窗口发送到父窗口的WM_COMMAND通
5、知消息(即在发送命令消息中加入控件的通知码)。注意:在Window9x新控件中不再传送WM_COMMAND通知消息,而是发送WM_NOTIFY消息,但为了兼容,旧有的控件还是传送WM_COMMAND消息。例如:CEdit控件向父窗口发送EN_CHANGE通知代码的WM_COMMAND消息。注意:框架像传送其它WM_消息一样传送通知消息,但有一个例外,即由[按钮]控件发送的BN_CLICKED通知消息,被作为命令消息特别处理。㈠、WM_COMMAND其所对应的宏如下:①、ON_CONTROL(通知码,nI
6、D,fn)②、ON_CONTROL_RANGE(通知码,nFirstID,nEndID,fn)注意:这两个宏的应用和ON_COMMAND、ON_COMMAND_RANGE相同,所不同的是在宏前面加入[通知码]。注意:可以根据不同的控件的[通知码]派生出特定的宏,其所派生的宏一般为在[通知码]前面加上ON_。㈡、WM_NOTIFY其所对应的宏如下:①、ON_NOTIFY(通知码,nID,fn)其中函数的原型如下:afx_msgvoidfn(NMHDR*pNotifyStruct,LRESULT*resul
7、t)其中结构:typedefstructtagNMHDR{HWNDhwndFrom;//发送通知消息的控件的句柄;UINTidFrom;//发送通知消息的控件的ID;UINTcode;//通知码;}NMHDR;②、ON_NOTIFY_EX(通知码,nID,fn)表示一个消息在多个对象的成员函数中进行处理。其中函数的原型如下:afx_msgBOOLfn(UINTnID,NMHDR*pNotifyStruct,LRESULT*result)说明:它必须返回BOOL类型的数值,其意义和ON_COMMAND_E
8、X相同。③、ON_NOTIFY_RANGE(通知码,nFirstID,nEnd,fn)表示多个控件的通知消息在同一个函数中进行处理。其中函数的原型如下:afx_msgvoidfn(UINTnID,NMHDR*pNotifyStruct,LRESULT*result)说明:其意义和ON_COMMAND_RANGE相同。4、反射消息处理父窗口在处理控件窗口的通知消息WM_CTLCOLOR、WM_COMMAND、WM_NOTIFY时,会把该消息转