找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 480|回复: 0

[讨论]:关于arx wizard 中生成的消息处理器的问题

[复制链接]
发表于 2003-1-11 02:02:45 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
各位好,我是一位arx的初学者,下面是我向斑竹请教关于arx wizard 中生成的消息处理器的问题,现在把讨论内容整理如下,请各位有兴趣的继续进行讨论。不要笑我菜哦!:)

------------------------------------------------------------
mycreatedream@etang.com says:
正好有个arx的问题要问你
我刚才想试用一下arx 的wizard 究竟做了些什么
但是对windows message Hook和Create a Message Handler Window两者的区别分不清楚

斑竹 says:
名字已经很清楚表明了二者的区别
Hook 是什么意思?
HOOK 是钩子/挂钩的意思
hook用于拦截 windows 消息

mycreatedream@etang.com says:
前面一个我知道了,后面的呢

斑竹 says:
在Windows编程中,消息的分发/转接始终是与窗口有关的
在Arx开发中,有时侯就需要这样一个窗口来处理消息
比如, CToolBar虽然也是一个窗口
但是,缺省的, 它的消息却是交由它的父窗口处理的
对ACAD而言,这个父窗口就是Acad主窗口
显然我们是无法直接修改Acad主窗口的
怎办?
我们可以将CToolbar的消息路由重新指派
也就是说我们需要重新指定CToolbar的消息处理器
这个消息处理器也就是你要创建的 Message Handler Window
一般说来,这个窗口并没有一个图形界面,只是一个消息处理器
明白了吗?

mycreatedream@etang.com says:
有几个问题
怎么指定这个消息处理器

斑竹 says:
SetOwner(CWnd *)
用SetOwner

mycreatedream@etang.com says:
有点明白了,但是这个消息处理器只用于处理toolbar的消息吗

斑竹 says:
不一定啊
你可以用于类似的环境

mycreatedream@etang.com says:
你是说用wizard生成一个消息处理器后,不能直接使用,需要再加修改消息路由的代码?

斑竹 says:
不是在Message Handler中指定

mycreatedream@etang.com says:
你是说用wizard生成一个消息处理器后,不能直接使用,需要再加修改消息路由的代码?

斑竹 says:
当然可以直接用啊
但你得在适当的地方SetOwner
[还得在Message Handler中填写相应的消息处理函数

mycreatedream@etang.com says:
但是,其实我并不是很清楚owner窗口有什么用
如果一个窗口是另一个窗口的Owner窗口,会有什么作用,跟parent窗口有什么不同?
我现在只知道prant窗口限制了子窗口的显示范围,但是owner窗口就不知道有什么用了

斑竹 says:
owner窗口就是指定的消息路由窗口,其实指的就是SendMessage的目标窗口( 第一个)。

mycreatedream@etang.com says:
不是很明白
窗口消息的处理路由是怎样的?

斑竹 says:
在Windows中,消息可以由本窗口(自己)处理,也可以让其他窗口去处理
消息会象水一样,在窗口之间流动

mycreatedream@etang.com says:
怎样将消息让其他窗口处理呢?
owner窗口是不是只是mfc的概念?

斑竹 says:
应该是,但消息流就是Windows本身的了
CWnd: SetOwner
void SetOwner( CWnd* pOwnerWnd );

Parameters

pOwnerWnd

Identifies the new owner of the window object. If this parameter is NULL, the window object has no owner.


斑竹 says:
Sets the current window’s owner to the specified window object. This owner can then receive command messages from the current window object. By default, the parent of the current window is its owner.

mycreatedream@etang.com says:
那是不是消息处理器只能作为别的窗口的owner窗口才能用?
那就是说,windows message hook 是用来作替代窗口本身的处理方式的,msg handler是用来替代窗口的owner的处理方式的?

mycreatedream@etang.com says:
那就是说,windows message hook 是用来作替代窗口本身的处理方式的

斑竹 says:


mycreatedream@etang.com says:
msg handler是用来替代窗口的owner的处理方式的

斑竹 says:
也算对吧

mycreatedream@etang.com says:
说回主题吧,如果要你用一句话来说明msg handler的作用,你会怎样总结(有点象"世纪大讲坛"的问题 )

斑竹 says:
msg Handler 仅仅是一个消息处理器
同时它还是个窗口,你还可以让它干点其他事儿

mycreatedream@etang.com says:
还可以干什么其他事呢

斑竹 says:
你想让它干什么?
就可以干啊
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-9-28 10:19 , Processed in 0.176533 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表