2

我试图在 .NET 2.0 中有一个透明的表单,它位于顶部,鼠标点击不可见,但可以在上面绘制。通过将 TransparencyKey 设置为表单的背景色,我可以轻松实现这一点。但是在所有Java程序(例如JDownloader、Vuze、Open Office)中都有一个非常容易重现的问题:有时当显示上下文菜单时,在我单击其他地方后,它的部分(或整个)菜单仍然可见。它在物理上是关闭的,因为它无法单击任何项​​目,但它的图像仍停留在我最上面的不可见表单上——可能在重绘时出现了一些问题。我非常感谢任何帮助。

雨果

4

1 回答 1

1

一个普通的 Windows 应用程序将上下文菜单实现为真正的窗口,因此当它们被用户关闭时,下面的所有窗口都会正确接收通知并重新绘制自己,因此菜单的图像不会“留在”任何地方。

您遇到问题的 Java 应用程序很可能通过直接在屏幕上绘制来实现上下文菜单,并且当菜单被关闭时,应用程序会自行滚动并使其下方的所有窗口无效。我猜这个方法不会使你的应用程序占用的区域无效,因为它认为你的窗口在它上面并且它没有意识到你的应用程序是透明的(这是猜测 - 我不确定。如果这些应用程序的上下文菜单看起来与本机应用程序的菜单不同,那么这可能就是正在发生的事情)。

如果这是正在发生的事情,那么您对此无能为力。您可以做的一件事是自己绘制到屏幕上,而不是使用透明窗口。或者您可以在表单上设置一个计时器,定期调用刷新/无效。

于 2011-05-04T00:32:14.630 回答