【问题标题】:How to disable click through on transparent control?如何禁用透明控件的点击?
【发布时间】:2011-03-24 02:21:44
【问题描述】:

我们的应用程序中有一个需要 Google 地球背景图片的地图表单,由于您无法在面板下方的浏览器中使用 Google 地球插件,我们使用第二个表单来显示背景图片。我们在地图表单上有一个透明面板,在该面板上进行绘图,而 Google 地球则在下方同步的表单上进行绘制。

我们通过给表单一个透明度键255, 250, 250 并在绘制之前将面板背景设置为这种颜色来实现透明度。虽然现在在查看在线可用信息之后,似乎面板不应该获得光标事件。

这在大多数情况下都可以正常工作,但是在一台或两台客户机器上(一台肯定是 Windows 7),光标在透明的面板上将无法正常工作。如果将光标放在地图的绘制区域上,则一切正常。

我认为这个问题是由于点击的透明度造成的,但由于它在大多数情况下都有效,我不确定到底发生了什么。我们已经更新了所有图形驱动程序,以查看客户机器上是否有自定义设置,但这没有帮助。

有人对透明度键的作用有明确的描述吗?有没有办法绝对设置面板应该接收鼠标事件?

编辑
添加了有关透明度键的详细信息。

【问题讨论】:

  • 啊,分层窗口的乐趣!祝你好运。

标签: c# winforms gdi+ transparency panel


【解决方案1】:

Stevo - 你有没有想过这个问题的答案?我遇到了同样的问题,并想办法将主窗体的透明度键更改为一些奇怪的颜色。可能会或可能不会帮助你。我有一个具有透明度的自定义控件,但表单键颜色也是我的绘图颜色,因此允许它(奇怪地)单击。我改变了它,它工作了!

【讨论】:

  • 我们实际上已经重写了我们的应用程序,不再需要透明度。
【解决方案2】:

尝试在窗体窗口的 WndProc 中截取 WM_HITTEST 消息,当您知道它在客户区上时返回适当的 HTCLIENT 值。可能是默认窗口处理有时会返回不同的值。

【讨论】:

    猜你喜欢
    • 2010-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-31
    • 2016-02-15
    • 2010-09-21
    相关资源
    最近更新 更多