大虾们好 :
我在看《深入浅出MFC》的时候,有一个地方不是很理解,望大家给解答一下!
书中说:由于CDocument派生自CCmdTarget,所以他可以接受来自菜单或工具栏的WM_COMMAND消息,不能接受一般的Windows消息。 View类派生自CWnd所以他可以接受一般的Windows消息,又由于他也派生自CCmdTarget,所以他可以接受来自菜单和工具栏的WM_COMMAND消息。 我的不解:系统消息和命令消息在CWnd中分流,如果是系统消息在CWnd中直接由基类向父类传递,如果是命令消息则需要进一步传递在CCmdTarget中处理,也就是命令消息也必须通过CWnd的传递,为什么CDocument可以处理命令消息,而不可以处理系统消息? 大虾们帮忙解释下!
我在看《深入浅出MFC》的时候,有一个地方不是很理解,望大家给解答一下!
书中说:由于CDocument派生自CCmdTarget,所以他可以接受来自菜单或工具栏的WM_COMMAND消息,不能接受一般的Windows消息。 View类派生自CWnd所以他可以接受一般的Windows消息,又由于他也派生自CCmdTarget,所以他可以接受来自菜单和工具栏的WM_COMMAND消息。 我的不解:系统消息和命令消息在CWnd中分流,如果是系统消息在CWnd中直接由基类向父类传递,如果是命令消息则需要进一步传递在CCmdTarget中处理,也就是命令消息也必须通过CWnd的传递,为什么CDocument可以处理命令消息,而不可以处理系统消息? 大虾们帮忙解释下!
解决方案 »
- MFC ListControl 怎么修改字体大小 怎么使一行中的特定列颜色改变
- 参数传递问题--附代码
- 远程抓屏
- 不显示删除回复显示所有回复显示星级回复显示得分回复 设计一个虚拟打印机程序,急…… 我没头绪 希望高手指点……
- 如何存储一个类型,如何根据类型名称建立一个类型? 如"int" 建立一个int类型
- 打包的程序,怎样安装完成后,生成一个桌面快捷方式的图标,和加入快速启动栏,
- 我写了一个ODBC SDK的c程序,已通过编译,可是出现link错误。
- 钩子链问题请教
- 请问如何使dailg对话框调整放大。谢谢!
- 怎样用VC画坐标轴 并且标上自己想标的坐标
- 我在vc6中每次按ctrl+f5,所有文件都会全部重新编译一次,请问这如何解决
- 看看VS的问题
因为CDocument是直接从CCmdTarget继承而来的,它没有窗口,
而Windows消息都是在窗口中处理,所以它无法处理,可以从消息结果体来看
typedef struct tagMSG {
HWND hwnd;
UINT message;
WPARAM wParam;
LPARAM lParam;
DWORD time;
POINT pt; }
MSG;
这个消息结构体中有窗口句柄,系统就是通过它来找到窗口并进行消息投递的
其实只要是CCmdTarget的派身类已经具备了消息处理功能。已经可以加入消息映射宏进行消息处理了。