【发布时间】:2012-06-16 14:35:29
【问题描述】:
是否可以在不调整表单可见性的情况下使表单的整个边界都透明化?
我正在使用对WindowFromPoint 的user32 api 调用,以便在鼠标下找到控件。在某些情况下,我想忽略浮动在主窗体(或另一个子窗体)前面的子窗体的存在,但保持此窗体忽略可见。
将要忽略的表单的不透明度设置为 0 将成功地导致 hittest 直接通过它,但表单显然是不可见的,我希望它保持可见。
既然这个子窗体上可以有任意数量的控件,有没有办法让这个窗体拦截所有WM_NCHITTEST 发送到窗体上子控件的消息,以便我可以为每个控件返回最合适的透明度?表单中包含的控件是任意的,因此我无法在内部对其进行修改。
【问题讨论】:
-
您是否尝试过在要捕获消息的表单中覆盖 WndProc 方法?如果这不起作用,那么您可以使用 MessageFilter,更多信息:social.msdn.microsoft.com/Forums/en/netfxbcl/thread/…
-
您要为过滤应用哪些实际规则?见:msdn.microsoft.com/en-us/library/ms158404.aspx
-
@Emo 我正在从另一个表单中测试一个表单,而不是表单的子控件,因此是 win32 api 调用。
-
@SebastianPiu 在表单中覆盖 WndProc 只会禁用表单区域本身的最热门响应,而不是表单上的任何子控件,因此您仍然可以最终在表单上点击某些内容. MessageFilter 看起来可能是我正在寻找的东西,我会更详细地查看它。
-
@SebastianPiu 似乎 WM_NCHITTEST 绕过了消息队列并直接发送到控件,因此消息过滤器没有机会处理它。
标签: c# winforms hittest wndproc