- UID
- 1560
- 积分
- 120
- 精华
- 贡献
-
- 威望
-
- 活跃度
-
- D豆
-
- 在线时间
- 小时
- 注册时间
- 2002-1-21
- 最后登录
- 1970-1-1
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
各位好,我是一位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:
你想让它干什么?
就可以干啊 |
|