在 XP 上,如何让工具提示出现在半透明表单上方?

Posted

技术标签:

【中文标题】在 XP 上,如何让工具提示出现在半透明表单上方?【英文标题】:On XP, how do I get the tooltip to appear above a transclucent form? 【发布时间】:2011-02-13 12:53:16 【问题描述】:

我有一个Opacity 小于 1.0 的表单。我有一个与表单上的标签关联的工具提示。当我将鼠标悬停在标签上时,工具提示显示在 under 表单而不是 over 表单。如果我将不透明度保留为默认值 1.0,则工具提示会正确显示在表单上。但是,我的形式显然不再是半透明的。 ;-)

我尝试使用SetWindowPos() 手动调整工具提示的位置,并使用CreateWindowEx()“手动”创建工具提示,但问题仍然存在。这让我怀疑这是一个 Win32 API 问题,而不是在 Win32 之上运行的 Windows 窗体实现的问题。

为什么工具提示会出现在表单下方,更重要的是,我怎样才能让它出现在表单应该出现的位置?

编辑:这似乎是 XP 独有的问题。 Vista 和 Windows 7 可以正常工作。我仍然想找到一种解决方法,让工具提示出现在 XP 的表单上方。

这是一个演示问题的最小程序:

using System;
using System.Windows.Forms;

public class Form1 : Form

    private ToolTip toolTip1;
    private Label label1;

    [STAThread]
    static void Main()
    
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new Form1());
    

    public Form1()
    
        toolTip1 = new ToolTip();
        label1 = new Label();
        label1.Location = new System.Drawing.Point(105, 127);
        label1.Text = "Hover over me";
        label1.AutoSize = true;
        toolTip1.SetToolTip(label1, "This is a moderately long string, "
               + "designed to be very long so that it will also be quite long.");
        ClientSize = new System.Drawing.Size(292, 268);
        Controls.Add(label1);
        Opacity = 0.8;
    

【问题讨论】:

+1 提供了一个最小的示例,即使我自己无法重现它。 我猜当你设置不透明度时,本机窗口会获得 WS_EX_LAYERED 样式,这就是为什么只有在不透明度 【参考方案1】:

XP 以 z-order tooltip bugs 而闻名。在工具提示上使用 SetWindowPos() 时,是否使用 HWND_TOPMOST 将其标记为始终位于顶部?

【讨论】:

是的,我尝试设置 HWND_TOPMOST,但没有帮助。你给我的链接给了我一些其他的想法来尝试。如果他们中的任何一个成功了,我会告诉你的。【参考方案2】:

为我工作!

在 Windows Vista 上使用 .NET 3.5。

【讨论】:

感谢您的尝试!也许这是微软在更高版本的 Windows 中修复的 XP 错误。 它在我可以访问的 Windows 7 机器上也能正常工作。一定是 XP 问题。

以上是关于在 XP 上,如何让工具提示出现在半透明表单上方?的主要内容,如果未能解决你的问题,请参考以下文章

如何在半透明的 QWidget 上播放视频?

在半透明框架/面板/组件上重新绘制。

在 XP 上运行时 Winform PictureBox 不透明

iOS在半透明view上面添加label导致label半透明

如何在鼠标移动时在图片上方显示链接,同时降低图片的不透明度?

如何在 JavaFX 按钮上设置工具提示?