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

时间:2010-04-28 20:09:26

标签: c# winforms winapi tooltip opacity

我的表单Opacity小于1.0。我有一个与表单上的标签相关联的工具提示。当我将鼠标悬停在标签上时,工具提示会在表单下显示而不是 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;
    }
}

2 个答案:

答案 0 :(得分:3)

XP以z-order tooltip bugs着称。当您在工具提示中使用SetWindowPos()时,您是否始终将其标记为HWND_TOPMOST?

答案 1 :(得分:1)

适合我!

在Windows Vista上使用.NET 3.5。