作者sb5471 (SB)
看板Programming
标题Re: [问题] GUI 的穿透
时间Thu Feb 12 01:01:25 2009
※ 引述《afz096 (我被淡水的路宠坏了)》之铭言:
: 用穿透这字眼无法确切的形容
: 将问题详述如下
: 一个视窗上面有其他的物件,
: 而这些物件几乎将整个视窗占满。
: 而当我滑鼠在视窗上 click 或是拖曳时,
: 这些 event 会被视窗上面的物件撷取,
: 而我希望这些 event 可以直接传给视窗。
: 图示说明如下
: ┌─────────┐
: │视窗 a │
: │ ┌──────┐ │
: │ │ 物件一 │ │
: │ └──────┘ │
: │ ┌──────┐ │
: │ │ 物件二 b │ │
: │ └──────┘ │
: └─────────┘
: 当滑鼠在 a 点 press,在 b 点 release,
: a 点 press 的 event 会被视窗撷取,
: b 点 release 的 event 会被物件二撷取,
: 想知道有甚麽样的方式,可以让物件二所撷取的 event 可以传给视窗。
: 两个想法如下:
: 第一个是当视窗内的物件产生的时候,顺便将视窗的 reference 传进去,
: 所以物件接受到 event 时,可以藉由 reference 交给视窗解决。
: 可是这样的缺点是,当视窗内的物件越多,reference 会越多,记忆体使用效率并不好。
: 另一个想法是,在所有的物件最上层,建立一个完全透明的物件,
: 而所有的滑鼠的 event 都由最上层透明的物件接收,
: 在根据 event 触发的座标,交给视窗或是相对应的物件来处理。
: 不过这样要处理好 z 轴的顺序,以及物件的透明度,而这是我的问题所在。
: 不知是否还有其他的解法,还请各位指教。
以下纯印象, 有错请指正
如果我记得没错的话, 最外层的视窗 和 物件二 都可以注册 MessageMap
只要在 物件二 的 Message Handler 不处理此 event...
event 自动就会往父容器...也就是 最外层视窗 丢...
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 61.216.113.30
1F:→ WPC001:Win SDK里头, 并不是注册MessageMap 123.195.0.144 02/13 01:08
2F:→ WPC001:是Message Loop要处理,不是自己的要往外丢 123.195.0.144 02/13 01:09