关于Windows消息机制的深入探讨~~~~~~~~请高手指点迷津~~~~(zx_sanjin)

zx_sanjin 2001-11-30 01:24:53
我们知道, Windows中如果是用户输入产生的消息, 如:WM_LBUTTONDOWN, 是系统首先捕获到, 然后再传递给对应的窗口; 但是如果是由程序自己产生的消息(不知这么说对不对), 就像控件继承了父辈中的虚函, 如DrawItem, 那么系统是怎样获知此控件是否需要DrawItem呢?? 对应的消息树又是如何产生的呢?
...全文
173 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
zx_sanjin 2001-11-30
  • 打赏
  • 举报
回复
To ysdesigned(清泉): 谢谢你`~提醒了我用windowsProc, 我怎么没想到, 这回就能自己证实了~~~~~再次感谢~~~~~~~~~
清泉ys 2001-11-30
  • 打赏
  • 举报
回复
没达到自画的条件她不是不响应而是调用基类的DrawItem
至于什么时候产生WM_DRAWITEM,我猜测可能是控将建立的时候发送的(不敢肯定)
OnDraw 2001-11-30
  • 打赏
  • 举报
回复
study
zx_sanjin 2001-11-30
  • 打赏
  • 举报
回复
To codewarrior && yoboo_yb: 在第几章啊? PDF得太不方便了, 我在研究第一章的程序与系统之间消息响应的关系图, 但这不是我想知的`~~举个例子吧:
就像我们在应用程序中按下一个按钮时, 系统的消息队列中产生了WM_LBUTTONDOWN的消息, 而应用程序的消息队列中产生了WM_BUTTON, 但这的起因都是用户操作而触发的; 但是DrawItem()函数就不一样了, 给我的感觉好像是智能的, 如果存在达到自画的条件她就响应, 根本不用你调用,
如果没达到自画的条件她就不响应, 那么我想问的应该是: 编译器是如何了解这些的(在MFC中, SDK的消息传递是很直观的~~~~~)
清泉ys 2001-11-30
  • 打赏
  • 举报
回复
如果CMybutton没重载CButton的WM_DRAWITEM执行CButton的WM_DRAWITEM
如果CButton没重载CWnd的WM_DRAWITEM执行CWnd的WM_DRAWITEM
如果有重载
LRESULT CMybutton::windowsProc
{
if(message==WM_DRWAITEM)
return TRUE;
else
return CButton::windowsProc;
}
如果没有重载
LRESULT CMybutton::windowsProc
{
if(message==WM_DRWAITEM)
return CButton::windowsProc;
else
return CButton::windowsProc;
}
以此类推
清泉ys 2001-11-30
  • 打赏
  • 举报
回复
This member function is called by the framework to allow your application to handle a Windows message. The parameters passed to your function reflect the parameters received by the framework when the message was received. If you call the base-class implementation of this function, that implementation will use the parameters originally passed with the message and not the parameters you supply to the function.
zx_sanjin 2001-11-30
  • 打赏
  • 举报
回复
To lanjingling: 判断是怎么判断? 难道那么多虚函数编译器要一个一个的去核对? 还请解释的清楚一些, 我实在不懂`~
To xctjtcc: callback怎么又是个类了? 它是函数类型啊``~~还有编译器是怎样获知此控件是否需要DrawItem呢??
To zj_ok: 消息传递从子类向上传? 解释的清楚写好吗? 系统消息该是由父窗口向子窗口传递, 该向下吧~~~~

对不起, 对你们都表示怀疑了, 呵呵~~~~~我实在有太多的疑问了, 手上有没什么好书, 深入浅出MFC是PDF版的, 看了几页就看烦了`~~~~再请高手解释啊~~~
yoboo_yb 2001-11-30
  • 打赏
  • 举报
回复
《深入浅出MFC》一书,接漏了Windows消息的运行机制,介绍了在MFC中实现。认真看,就明白了!
DeadWolf 2001-11-30
  • 打赏
  • 举报
回复
学习
会思考的草 2001-11-30
  • 打赏
  • 举报
回复
还是看看《深入浅出MFC》吧,看了就明白了。
zj_ok 2001-11-30
  • 打赏
  • 举报
回复
消息传递基本是从子类一层层往上传,文档视图结构稍有不同
xctjtcc 2001-11-30
  • 打赏
  • 举报
回复
你的说法可以做到,用户程序自己产生消息,但要在你的程序中加个callback类,这个类中定义所有你的程序可能产生的事件和系统的对应回调函数(即消息响应函数)之间的联系,即所说的消息树,就可以实现了。达到你的程序运行起来时,调用自己的callback类成员,实现和系统对象之间的通信。不知道我说得够不够明白,请反馈到xctjtcc@souying.net
langjingling 2001-11-30
  • 打赏
  • 举报
回复
首先判断该控件是否重载了DRAWITEM
如果有,就执行之,要不然就查看父辈的相同部分
dog_dog 2001-11-30
  • 打赏
  • 举报
回复
study

16,551

社区成员

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

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

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