На XP, как я могу получить всплывающую подсказку над полупрозрачной формой? - PullRequest
2 голосов
/ 29 апреля 2010

У меня есть форма с Opacity меньше 1,0. У меня есть подсказка, связанная с меткой на форме. Когда я наводю указатель мыши на метку, всплывающая подсказка показывает в форме вместо над формы. Если я оставлю значение «Непрозрачность» по умолчанию равным 1,0, всплывающая подсказка будет отображаться поверх формы. Тем не менее, моя форма, очевидно, больше не прозрачна. ; -)

Я попытался вручную отрегулировать положение всплывающей подсказки с помощью SetWindowPos() и создать всплывающую подсказку «вручную» с помощью CreateWindowEx(), но проблема остается. Это заставляет меня подозревать, что это проблема Win32 API, а не проблема с реализацией Windows Forms, которая работает поверх Win32.

Почему всплывающая подсказка появляется под формой, и, что более важно, как заставить ее отображаться поверх формы, где она должна быть?

Редактировать : похоже, проблема только в 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 ]

3 голосов
/ 29 апреля 2010

XP известен наличием z-порядка всплывающей подсказки ошибок . Когда вы использовали SetWindowPos () во всплывающей подсказке, помечали ли вы его как всегда сверху с помощью HWND_TOPMOST?

1 голос
/ 29 апреля 2010

У меня работает!

image

Использование .NET 3.5 в Windows Vista.

...