Как создавать богатые всплывающие подсказки и богатые воздушные шары в области уведомлений

Мне было интересно, что всякий раз, когда вы вызываете ShowBalloonTip метод класса NotifyIcon, вы получаете всплывающую подсказку:

Standard Baloon Tip
Fig1: Стандартная всплывающая подсказка



Некоторые приложения и продукты Microsoft могут отображать не только "простые" всплывающие подсказки.
Вот несколько примеров:

Windows Update Tip Рис. 2. Всплывающая подсказка Центра обновления Windows


Driver Installation Tip
(источник: microsoft.com)

Рис. 3. Всплывающая подсказка об установке драйвера оборудования


USB Safely Remove
Рис. 4. Подсказка по удалению оборудования (Программа: USB Safely Remove)



Хороший взгляд на рисунки 2, 3 и 4 показывает, что они не являются стандартными всплывающими подсказками!

Fig2 имеет другую форму, возможно, от настройки свойства Region. Он также имеет собственный значок, который намного больше, чем стандартный ToolTipIcon.

На рисунке 3 используется стандартная форма (я думаю), но у нее есть собственный значок, который, разумеется, больше размера ToolTipIcon по умолчанию.

На рисунке 4 используется стандартный ToolTipIcon, но он имеет другую форму.


Мой вопрос заключается в том, как создать какие-либо всплывающие подсказки, которые отображаются в области уведомлений в .NET? Я могу обрабатывать WinAPI, а также он может производить необходимый вывод.

Ответ 1

Вам нужно использовать функцию Win32 Shell_NotifyIcon. Вы можете установить член dwInfoFlags структуры NOTIFYICONDATA в NIIF_USER, чтобы использовать пользовательский значок для всплывающей подсказки.

В Windows XP с пакетом обновления 2 и более поздних версий вы можете использовать элемент hIcon для указания пользовательского значка.

В Windows Vista и позже структура NOTIFYICONDATA содержит дополнительный член hBalloonIcon. Вы можете использовать этот элемент, чтобы указать пользовательский значок, если вы установили член cbSize в правильный размер расширенной структуры NOTIFYICONDATA.

Ответ 2

Проверьте это:

http://www.codeproject.com/KB/WPF/WPF_TaskbarNotifier.aspx

или

www.codeproject.com/KB/WPF/wpf_notifyicon.aspx

Другой вариант - создать свой собственный форму для уведомления, то у вас будет уведомление с цветами фона и розовых границ:) BTW: у него также могут быть некоторые функции.

Как в этом примере:

http://i.stack.imgur.com/QtA0Y.jpg & Л; < Пример изображения

Создайте форму, как вам нравится, Region, Controls, Etc:) и код что-то вроде:

void notifyIcon_MouseMove(object sender, MouseEventArgs e)
    {
        if (!this.Visible)
        {
            ShowPopup();
        }
    }

    Timer t = new Timer();
    private void ShowPopup()
    {
        Rectangle rect = Screen.GetWorkingArea(new Point(Screen.PrimaryScreen.Bounds.Right, Screen.PrimaryScreen.Bounds.Bottom));
        this.Top = rect.Bottom - this.Height;
        this.Left = rect.Right - this.Width;
        this.Visible = true;

        t.Interval = 4000;
        t.Tick += new EventHandler(t_Tick);
        t.Start();
    }

    void t_Tick(object sender, EventArgs e)
    {
        t.Stop();
        Visible = false;
    }

    private void Form1_Click(object sender, EventArgs e)
    {
        this.Visible = false;
    }

    private void Form1_FormClosing(object sender, FormClosingEventArgs e)
    {
        notifyIcon.Visible = false;
        notifyIcon.Dispose();
    }

Кстати, все они выглядят одинаково, с разными размерами значков, и Первый может поместиться вправо, а все остальные выровнены влево... незначительные изменения оттенков и т.д.:)