我试图在.NET 2.0中使用一个透明的表单,它位于顶部,对于鼠标点击是不可见的,但可以在其上绘制。通过将TransparencyKey设置为表单的背景颜色,我可以轻松实现此目的。但是在所有java程序中都有一个非常容易重现的问题(例如JDownloader,Vuze,Open Office):有时当显示上下文菜单时,它会在我点击其他地方后仍然可以看到(或整个)菜单的一部分。它是物理关闭的,因为它无法点击任何项目,但它的图像保持在我的顶部不可见的形式 - 可能在重绘时有一些问题。我非常感谢任何帮助。
雨果
答案 0 :(得分:1)
普通的Windows应用程序将上下文菜单实现为真实的窗口,因此当用户将其关闭时,下面的所有窗口都会正确接收通知并自行重新绘制,因此菜单的图像不会“遗留”在任何地方。 / p>
您遇到问题的Java应用程序很可能通过直接在屏幕上绘制来实现上下文菜单,当菜单被取消时,应用程序自行滚动并使其下面的所有窗口无效。我猜这个方法不会使你的应用程序所占用的区域无效,因为它认为你的窗口在它之上并且它没有意识到你的应用程序是透明的(这是猜测 - 我不确定。如果这些应用程序的上下文菜单看起来与本机应用程序的菜单不同,那么这可能是正在发生的事情。)
如果发生了这种情况,那么你无能为力。你可以做的一件事就是自己画画,而不是使用透明窗口。或者你可以在表单上定时调用刷新/无效。