2010-04-28 21 views
2

我有一个表格,其中Opacity小于1.0。我有一个工具提示与表单上的标签相关联。当我将鼠标悬停在标签上时,工具提示将显示下的表格,而不是,其格式为。如果我将不透明度保留为默认值1.0,则工具提示将正确显示在表单上。但是,我的表格显然不再是半透明的。 ;-)在XP上,如何让工具提示出现在半透明窗体上方?

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

为什么工具提示出现在表单下,更重要的是,如何让它出现在表单所在的位置?

编辑:这似乎是一个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; 
    } 
} 
+0

+1提供了一个最小的例子,尽管我自己无法重现它。 – 2010-04-28 20:39:36

+0

我猜测,当你设置不透明度时,本地窗口会获得WS_EX_LAYERED样式,这就是为什么只有当不透明度小于1.0时才会出现该错误(分层窗口有点特别,它们会在屏幕上合成到最后可能) – Anders 2010-04-28 21:35:34

回答

1

对我的作品!

在Windows Vista上使用.NET 3.5。

+0

谢谢你的尝试!也许这是微软在Windows更高版本中修复的XP错误。 – 2010-04-28 20:48:44

+0

它也适用于我可以访问的Windows 7机器。必须是XP的问题。 – 2010-04-28 20:59:12

3

XP以z顺序而闻名tooltipbugs。当您在工具提示上使用SetWindowPos()时,是否将它标记为始终位于HWND_TOPMOST顶端?

+0

是的,我尝试设置HWND_TOPMOST,但它没有帮助。你给我的链接给了我一些其他的想法来尝试。如果其中任何一部分出现,我会通知您。 – 2010-04-28 21:26:09

相关问题