hur.cn - 华软网

 热门搜索

MFC处理的3类消息

  作者:未知    来源:网络    更新时间:2011/1/12
历来没有接触过 MFC,今天第一次在网上看 MFC 措置惩罚的消息类型,发现下面的段落。觉得说的不是很清楚,也不明白为什么要分成这三类消息。谁能详细说说?谢谢了。
引用
MFC措置惩罚的三类消息

根据措置惩罚函数和措置惩罚进程的不同,MFC主要措置惩罚三类消息:

Windows消息,前缀以“WM_”打头,WM_COMMAND破例。Windows消息直接送给MFC窗口进程措置惩罚,窗口进程调用对应的消息措置惩罚函数。一般,由窗口对象来措置惩罚这类消息,也就是说,这类消息措置惩罚函数通常为MFC窗口类的成员函数。

控制通知消息,是控制子窗口送给父窗口的WM_COMMAND通知消息。窗口进程调用对应的消息措置惩罚函数。一般,由窗口对象来措置惩罚这类消息,也就是说,这类消息措置惩罚函数通常为MFC窗口类的成员函数。

需要指出的是,Win32运用新的WM_NOFITY来措置惩罚复杂的通知消息。WM_COMMAND类型的通知消息仅仅能传送一个控制窗口句柄(lparam)、控制窗ID和通知代码(wparam)。WM_NOTIFY能传送任意复杂的信息。

命令消息,这是来自菜单、工具条按钮、加速键等用户接口对象的WM_COMMAND通知消息,属于应用程序自己定义的消息。通过消息映照体制,MFC框架把命令按一定的路径散发给多种类型的对象(具有消息措置惩罚能力)措置惩罚,如文档、窗口、应用程序、文档模板等对象。能措置惩罚消息映照的类必需从CCmdTarget类派生。

---华软 网友回答---
lz不如多联系 多看书就明白了

大家解释的也都和书上差不多
---华软网友回复---
刚起头不需要理解

话说我也不理解
---华软网友回复---
引用 1 楼 tttyd 的回复:
lz不如多联系 多看书就明白了

大家解释的也都和书上差不多

主要是没有感性认识。网上文字都是一大堆,我也不知道代码究竟是怎样的。
---华软网友回复---
引用 2 楼 mayudong1 的回复:
刚起头不需要理解

话说我也不理解

请问怎样才能学好 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、命令消息措置惩罚
命令消息来自命令用户接口对象(菜单、加速键或工具栏按钮)发出的WM_COMMAND消息;
㈠、WM_COMMAND消息
其所包括的类型和对应的宏以下:
①、ON_COMMAND(ID,pfn)
规范的命令消息;

②、ON_COMMAND_EX(ID,pfn)
多个对象对统一个命令 ID 的措置惩罚;
其函数的原型以下:
afx_msg BOOL pfn(UINT nID)
说明:
当前往 TRUE 时表示已经措置惩罚,不用在消息措置惩罚链中继续措置惩罚该命令;为 FALSE 时表示继续在消息措置惩罚链中措置惩罚该命令。
注意:
其一:在多对象措置惩罚中一定要运用该宏;
其二:pfn(UINT nID)(消息措置惩罚函数)前往值将其类型void改成BOOL,而且必需为FALSE;
其三:多个对象的措置惩罚是由高层向低层的进程:即视图类→主框架窗口类→应用程序类;

③、ON_COMMAND_RANGE(nID,nLastID,pfn)
多个命令 ID 提供相同的措置惩罚;
注意:
其一:保证nID、nLastID的值在 Resource.h 中是接连的。
其二:一般在函数 pfn(UINT nID) 中加入参数,用来确定那一个按钮点击。

㈡、CN_UPDATE_COMMAND_UI消息
当菜单项、工具栏按钮等[命令用户接口对象]要更新其状态时所对应的消息,它所包括的类型和对应的宏以下:
①、ON_UPDATE_COMMAND_UI(ID,pfn)
其中函数的原型以下:
afx_msg void pfn(CCmdUI* pCmdUI)

②、ON_UPDATE_COMMAND_UI_RANGE(nID,nLastID,pfn)
该函数能够措置惩罚一组[命令用户接口对象]的外观;
其中函数的原型以下:
afx_msg void pfn(CCmdUI* pCmdUI)
重要:
CCmdUI 中的 m_nID 成员表示不同的 ID,因此能够利用它来举行区别措置惩罚。

3、控件的通知消息
从控件和子窗口发送到父窗口的WM_COMMAND通知消息(即在发送死令消息中加入控件的通知码)。
注意:在 Window9x 新控件中不再传送WM_COMMAND通知消息,而是发送 WM_NOTIFY 消息,但为了兼容,旧有的控件照旧传送WM_COMMAND消息。
例如:
CEdit控件向父窗口发送 EN_CHANGE 通知代码的WM_COMMAND消息。
注意:框架像传送其它 WM_ 消息一样传送通知消息,但有一个破例,即由 [按钮] 控件发送的 BN_CLICKED 通知消息,被作为命令消息特别措置惩罚。
㈠、WM_COMMAND 其所对应的宏以下:
①、ON_CONTROL(通知码, nID,fn)
②、ON_CONTROL_RANGE(通知码, nFirstID,nEndID,fn)
注意:
这两个宏的应用和 ON_COMMAND、ON_COMMAND_RANGE相同,所不同的是在宏前面加入[通知码]。
注意:能够根据不同的控件的[通知码]派生出特定的宏,其所派生的宏通常是在 [通知码] 前面加上 ON_。
㈡、WM_NOTIFY 其所对应的宏以下:
①、ON_NOTIFY(通知码, nID,fn)
其中函数的原型以下:
afx_msg void fn(NMHDR* pNotifyStruct,LRESULT* result)
其中结构:
typedef struct tagNMHDR { 
HWND hwndFrom; //发送通知消息的控件的句柄;
UINT idFrom; //发送通知消息的控件的 ID;
UINT code; //通知码;
} NMHDR; 

②、ON_NOTIFY_EX(通知码, nID,fn)
表示一个消息在多个对象的成员函数中举行措置惩罚。
其中函数的原型以下:
afx_msg BOOL fn(UINT nID,NMHDR* pNotifyStruct,LRESULT* result)
说明:
它必需前往 BOOL 类型的数值,其意义和 ON_COMMAND_EX 相同。

③、ON_NOTIFY_RANGE(通知码, nFirstID,nEnd,fn)
表示多个控件的通知消息在统一个函数中举行措置惩罚。
其中函数的原型以下:
afx_msg void fn(UINT nID,NMHDR* pNotifyStruct,LRESULT* result)
说明:
其意义和ON_COMMAND_RANGE相同。

---华软网友回复---
引用 4 楼 haow85 的回复:
引用 2 楼 mayudong1 的回复:
刚起头不需要理解

话说我也不理解

请问怎样才能学好 MFC 呢?求教了。


也没有什么方法,多看书,多编写
---华软网友回复---
  class="deleted_message"> 该回复于2011-01-13 09:07:53被版主删除
---华软网友回复---
引用 5 楼 lsq19871207 的回复:
(一)、消息类型:
1、命令消息(WM_COMMAND)
所有派生自 CCmdTarget 的类都有资历接受WM_COMMAND。

2、Window消息(WM_xxx)
所有派生自 CWnd 的类都有资历接受 WM_xxx。

3、控件消息(WM_NOTIFY)
控件向其父窗口通知消息。

(二)、消息措置惩罚
1、WM_xxx 消息措置惩罚
窗口类(自身)措置惩罚→基类措置惩罚→CWnd∷D……

谢谢楼主的回复。能说说这三类消息各对应什么情况么?我知道了第三种消息对应于控件向父窗口发送消息。只是前两种情况我还不知道对应于什么情况?      
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。