0

我有一个半透明的表格(使用 AlphaBlend)作为覆盖。为了让用户仍然能够与下面的窗口进行交互,我在我的表单上设置了 WS_EX_NOACTIVATE,所以所有的左右点击都会进入另一个窗口。

但是,我的表单上有一些可点击的标签。单击这些并执行适当的操作可以正常工作,因为尽管调用了 WS_EX_NOACTIVATE 标志 OnClick 方法,但是单击(显然)也会传播到另一个窗口,在这种情况下我不希望这样做。

那么,如果我已经在我的表单中处理了它,有谁知道如何“停止”将点击发送到下面的窗口?基本上我希望能够选择点击是否“属于我”并且不会被传播,或者我下面的窗口是否接收它。

4

2 回答 2

4

正如 Rob 解释的那样,WS_EX_NOACTIVATE 在这里不相关。很可能您使用了 WS_EX_TRANSPARENT 并使您的窗口对鼠标单击透明。

要更精细地控制鼠标单击透明度,请在顶层窗口中处理 WM_NCHITTEST 消息。为您想要“点击”的区域返回 HTTRANSPARENT。否则返回,例如 HTCLIENT。

于 2013-06-11T23:09:10.603 回答
1

Wm_ex_NoActivate在这里应该无关紧要。这只是控制您的窗口是否接收输入焦点。实际上,如果您从一个临时程序开始,并且只更改扩展窗口样式,您会看到当您在该程序窗口的范围内单击时,单击会以通常的方式处理,除了窗口永远不会活性; 该窗口后面的程序不会收到任何点击事件。

因此,为了让你的标签控件吃点击事件而不是将它们转发到它们后面的窗口,你需要找出你做了什么让它们开始转发这些消息并停止这样做,不管是什么。

于 2013-06-11T20:02:24.770 回答