意识到自己的理由太可疑了,我现在就以另一种方式去做。但是我还是很好奇
出于怀旧,熟悉和懒惰的原因,我正在使用MFC编写UI。由于可疑的原因(好像还不够),我想向组框中添加一个(双击)事件。自然地,组框包含东西-实际上,它包含另一个静态项目,我可以在其中成功添加(双击)事件处理程序。
有什么原因不能使事件处理程序能够像对简单文本静态项进行操作一样,对组框上的单击起作用?控件上,控件内或控件附近的任何点击都不会触发该事件。
注意-我已阅读http://www.codeproject.com/KB/static/staticctrl_tut.aspx并尝试响应ON_STN _...事件和ON_BN _...消息,设置了通知样式(BS_NOTIFY出现在rc文件中)...仍然缺少某些内容-什么是它?可能吗我搜索过的大多数内容都表明它是……但是对于C++ / MFC却没有明确的答案。
自从首次发布此问题以来,我已经找到了对WM_NCHITTEST消息的引用,并暗示您必须为此消息创建一个处理程序,以覆盖用HT_TRANSPARENT响应的组框默认行为...尽管在ClassWizard中设置了透明属性虚假。嗯谁能确认这确实是关键?
最佳答案
我认为WM_NCHHITTEST / HT_TRANSPARENT确实是这里的关键。
组框是一种奇怪的控件:看起来它们包含其他控件,但它们实际上是HWND树中这些控件的同级。因此,看起来像包含两个按钮的组框实际上是这些按钮的同级-可能在HWND层次结构中位于它之前或之后。
分组框以HT_TRANSPARENT响应WM_NCHITTEST,因此鼠标单击会直接通过它们。这样做的好处之一是,无论该组框位于窗口顺序中包含的控件之前还是之后,都没有关系。点击最终将被路由到那些控件,而不是组框。
要双击(或仅单击)工作组框,您需要做两件事:
请注意,这又是与WS_EX_TRANSPARENT不同的透明类型,它可能是“透明类”向导属性所映射的。简而言之,HT_TRANSPARENT与鼠标透明有关。 WS_EX_TRANSPARENT更多地是关于最后绘制(paint),以便 sibling “透彻”。