10

ShowBalloonTipクラスのメソッドを呼び出すたびにNotifyIcon、次のようなバルーン ツールチップが表示 されるのではないかと思っていました。

標準バルーンチップ
図 1: 標準のバルーン ツールチップ



一部のアプリケーションおよび Microsoft 製品では、これらの「単純な」バルーン ヒント以上のものを表示できます。
以下にいくつかのサンプルを示します。

Windows Update のヒント 図 2: Windows Update バルーン ツールチップ


ドライバーのインストールのヒント
(ソース: microsoft.com )

図 3: ハードウェア ドライバーのインストール バルーン ツールチップ


USB の安全な取り外し
図 4: ハードウェアの取り外しツールチップ (プログラム: USB の安全な取り外し)



図 2、3、および 4 をよく見ると、これらが標準のバルーン ツールチップではないことがわかります。

Fig2は、おそらくプロパティの設定とは異なる形状をしていRegionます。また、標準のToolTipIconよりもはるかに大きいカスタム アイコンもあります。

Fig3は標準の形状を使用しています (私が思うに) が、言うまでもなくデフォルトのToolTipIconサイズよりも大きいカスタム アイコンがあります。

Fig4は標準のToolTipIconを使用していますが、形状が異なります。


私の質問は、.NET の通知領域に表示される「豊富な」バルーン ツールチップをどのように作成するのかということです。必要な出力を生成できるだけでなく、WinAPI も処理できます。

4

2 に答える 2

5

Win32 Function Shell_NotifyIconを使用する必要があります。バルーン ツールチップにカスタム アイコンを使用するために、 NOTIFYICONDATA構造体のdwInfoFlagsメンバーをNIIF_USER に設定できます。

Windows XP Service Pack 2 以降では、hIconメンバーを使用してカスタム アイコンを指定できます。

Windows Vista 以降では、NOTIFYICONDATA 構造体に追加のメンバーhBalloonIconが含まれています。cbSizeメンバーを拡張 NOTIFYICONDATA 構造体の正しいサイズに設定した場合、このメンバーを使用してカスタム アイコンを指定できます。

于 2012-01-12T18:21:38.223 に答える
0

Check this out:

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

or

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

Other option is to Make your own notification form balloon, then you will have notification with flowers background and pink borders :) BTW: that can have some functionality in it too.

As in this example:

http://i.stack.imgur.com/QtA0Y.jpg << Image Example

Create a form as you like, Region, Controls, Etc :) and code something like:

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();
    }

BTW they all look kinda same, with different Icon size, and the First one could fit to the right, while all other are aligned to left... minor shade changes Etc. :)

于 2012-01-12T14:36:02.737 に答える