Прозрачная форма на рабочем столе - PullRequest
1 голос
/ 22 сентября 2008

Я хочу создать приложение на c # с несколькими прозрачными окнами и включенным текстом.

Сложная задача - заставить эти формы располагаться поверх рабочего стола, но под значками рабочего стола. Это возможно?

Ответы [ 3 ]

4 голосов
/ 22 сентября 2008

Очень просто сделать окно прозрачным:

this.BackColor = Color.Fuchsia;
this.TransparencyKey = Color.Fuchsia;

Вы можете сделать что-то подобное, чтобы сделать так, чтобы вы все еще могли взаимодействовать с рабочим столом или чем-то еще под вашим окном:

public const int WM_NCHITTEST = 0x84;
public const int HTTRANSPARENT = -1;

protected override void WndProc(ref Message message)
{
    if ( message.Msg == (int)WM_NCHITTEST )
    {
        message.Result = (IntPtr)HTTRANSPARENT;
    }
    else
    {
        base.WndProc( ref message );
    }
}
0 голосов
/ 12 февраля 2009

Метод, описанный выше Джеффом Хиллманом, эффективен для того, чтобы сделать окно прозрачным, что должно дать вам возможность выглядеть так, как будто это часть рабочего стола (которую вы упомянули - ваша цель.

Одна из проблем, с которой вы можете столкнуться, с которой я недавно столкнулся, - это рисование в окне с установленными флагами сглаживания. В частности, используя DrawText, любой текст, который отображается с установленным флагом сглаживания, отображается так, как если бы фон НЕ был прозрачным. Конечным результатом является то, что вы получаете текст с небольшой нечеткой рамкой вокруг него. Я уверен, что это будет справедливо и для всего остального, хотя я не пробовал.

Есть какие-нибудь мысли о том, как решить эту проблему?

0 голосов
/ 22 сентября 2008

Спасибо за советы, Джефф. Это все еще не совсем то, что я после. Мне бы хотелось, чтобы окно выглядело так, как если бы оно было частью рабочего стола, чтобы значки могли располагаться поверх моей формы.

Может быть, есть другой способ сделать это. Можно ли рисовать текст и графику прямо на рабочем столе?

...