深入浅出 之 问题6 糊涂消息 100分

ren20 2001-02-19 08:50:00
我现在正在看第3章的 Command Routing(命令传递)

感觉是一塌糊涂,原本有些条理的认识也被仿真代码搞的难辩东西。
1。第147页的图3-6, 我就一直看不明白他的意思?

后面的内容更是如此。
在149页下面写到,
"1.如果this指向CMyFrameWnd对象,那么调用的是CFrameWnd::OnCommand。
2.如果this指向CMyView对象,那么调用CView::OnCommand,而因为CView并没有改写
OnCommand,所以调用的其实是CWnd::OnCommand,这次没有殊途同归.”

我觉得对于1,还是要调用CWnd::OnCommand的。

各位高手对于命令传递的认识也可以谈谈, 参看《深入浅出 MFC 2》
谢谢
...全文
518 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhu_soft 2001-02-21
  • 打赏
  • 举报
回复
<<用 MFC 为 WINDOWS 编程》(第二版)作者 Jeff Prosise 一书为MFC编程的经典著作。不知道国内出版了没有 ,在那里可以买到。
zhu_soft 2001-02-21
  • 打赏
  • 举报
回复
<<用 MFC 为 WINDOWS 编程》(第二版)作者 Jeff Prosise 一书为MFC编程的经典著作。不知道国内出版了没有 ,在那里可以买到。
zhu_soft 2001-02-21
  • 打赏
  • 举报
回复
<<用 MFC 为 WINDOWS 编程》(第二版)作者 Jeff Prosise 一书为MFC编程的经典著作。不知道国内出版了没有 ,在那里可以买到。
Ashiyura 2001-02-21
  • 打赏
  • 举报
回复
To:zhu-soft()

Jeff Prosise 的大作北京大学出版社有影印版,书名为<MFC与Windows编程>,
给您一个链接:http://www.my8848.net/www/products/getdetail01.asp?shopid=00008848&rckcode=001001001011&gdsid=00114319
如果链接不可用,请直接去8848搜索"mfc"就行了。
spdia 2001-02-19
  • 打赏
  • 举报
回复
上个贴未写完,继续
CMyFrameWnd未改写OnCommand()
那么调用基类CFrameWnd::OnCommand()
如果CFrameWnd::OnCommand()仍未改写
就调用CWnd::OnCommand()
如改写,那么...
spdia 2001-02-19
  • 打赏
  • 举报
回复
1.如果this指向CMyFrameWnd对象,那么调用的是CFrameWnd::OnCommand。
这就是虚函数问题,如果this指向CMyFrameWnd对象,那么调用的是this->OnCommand()
就是CFrameWnd::OnCommand()
ren20 2001-02-19
  • 打赏
  • 举报
回复
不是您看错了,我刚开始发帖子时只能给95分,现在的100分是我又加上的。
yoci 2001-02-19
  • 打赏
  • 举报
回复
你读书的速度很快啊
我也正读到这个地方

图3-6是这样的
如果 命令訊息接收物的 是 Frame 視窗
那么消息被传到:
1. View
如果没有被处理,则然后传到 2. Frame 視窗本身
最后是 3. CWinApp 物件

111222 2001-02-19
  • 打赏
  • 举报
回复
哦,原来是我看错了。
111222 2001-02-19
  • 打赏
  • 举报
回复
问一个无关的问题:

为什么本贴从外面看是100分,
现在看上面的问题点数却是95分?
cycsharp 2001-02-19
  • 打赏
  • 举报
回复
P149下面写的1.2.境况发生的代码指的是P149最下面的代码,和上面的代码无关

yinxingshu 2001-02-19
  • 打赏
  • 举报
回复
命令的传递路径是:
MainFrame
ChildFrame
Document
View
如果命令是传递给MainFrame的,他会先向下传递处理,都没有处理的就给自己处理了
其它的也一样,如Document就先给View处理,没有处理的就自己处理。
你所说的是基类与派生类的问题,CFrameWnd的父类是CWnd,CWnd并没有处理所有的
命令,但它却处理了非常多的消息,而CFrameWnd却处理了很多的缺省命令,所以这里
应该是针对于某一个缺省的命令,在CFrameWnd和CWnd里面都处理了的,所以还是要调用CWnd::OnCommand是错误的,是没有殊途同归的。
ren20 2001-02-19
  • 打赏
  • 举报
回复
还有吗?
cycsharp 2001-02-19
  • 打赏
  • 举报
回复
欢迎大家指正

cycsharp 2001-02-19
  • 打赏
  • 举报
回复
我个人的理解:

首先把处理顺序栏中的编号改为F1.F2.F3. V1.V2. D1.D2

那么WM_COMMAND的处理顺序是F1 -> V1 -> V2 -> D1 -> D2 -> F2 -> F3

如果有谁处理了就不再传了
ren20 2001-02-19
  • 打赏
  • 举报
回复
图3-6还是不明白

16,550

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧