首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

一个控件类怎么获取父窗口的点击事件,鼠标点击不在控件下

2012-08-26 
一个控件类如何获取父窗口的点击事件,鼠标点击不在控件上?比如一个Dialog,有一个子窗口控件ListBox,ListBo

一个控件类如何获取父窗口的点击事件,鼠标点击不在控件上?
比如一个Dialog,有一个子窗口控件ListBox,ListBox的关联变量为从CListBox派生的类CMyListBox

我期望做到的效果是,我在CMyListBox中能感知Dialog上的点击事件(鼠标不点击在ListBox上)
这样子我可以把ListBox隐藏。

如果点击到Dialog的别的控件,可以用killfocus事件感知,但是如果直接点击在Dialog上,我就没有办法了。

[解决办法]
dlg送个消息给它就行了。
[解决办法]
你想隐藏CMyListBox,你现在是想通过CMyListBox自身获取到鼠标点父窗口的其他地方了,再隐藏自己。换一种思路,父窗口的鼠标单击事件里,判断鼠标不在CMyListBox上的话,隐藏CMyListBox。

也就是说,由CMyListBox自己控制隐藏与否,改成由父窗口来控制CMyListBox的隐藏与否。
[解决办法]
每个窗口都有自己的消息队列,每个窗口所有的消息都是由自身的消息队列和消息处理程序来维护,一个窗口所得到的消息不可能被传到另一个窗口,除非该窗口主动将自己得到某个消息的信息告诉另一个窗口!
有一点须注意,首先要将消息和事件这两个概念区分清楚,消息是指由窗口自身状态变化所发生的,而事件是由子窗口(或称作控件)发送给父窗口的,也就是先前所说的窗口主动将自己得到某个消息的信息告诉另一个窗口!
比如单击,先自定义一个消息,在父窗口类中为单击消息添加消息处理函数 OnLButtonDown(),然后再在该函数中添加SendMessage(......)语句,将自定义消息传送给目标窗口(控件也是窗口)
[解决办法]
将父窗口收到的消息转发一份给子窗口
[解决办法]

探讨

引用:
每个窗口都有自己的消息队列,每个窗口所有的消息都是由自身的消息队列和消息处理程序来维护,一个窗口所得到的消息不可能被传到另一个窗口,除非该窗口主动将自己得到某个消息的信息告诉另一个窗口!
有一点须注意,首先要将消息和事件这两个概念区分清楚,消息是指由窗口自身状态变化所发生的,而事件是由子窗口(或称作控件)发送给父窗口的,也就是先前所说的窗口主动将自己得到某个消息的信……

[解决办法]
鼠标捕获
[解决办法]
同意#13,你不想通过程序内的消息做,那么只有更原始的截获系统的鼠标消息了。

热点排行