天天看点

让FX1.1的NotifyIcon支持BalloonTip(2)

让FX1.1的NotifyIcon支持BalloonTip(2)

。于是干脆一不做二不休,就用NotifyIcon Reflect出来的代码做基类来实现支持Balloon Tip得了。

于是实现一个NotifyIconEx类继承至重新编译的NotifyIcon类,新的NotifyIcon只做了利于被继承的非常少量的修改。目前除了事件处理外,只添加了一个ShowBalloonTip方法,并重载了一下WndProc方法,至于BalloonTipTitle、BalloonTipMessage和BalloonTipIcon以及Timeout的属性支持都没有加,因为要加上也非常的容易了。

    派生类NotifyIconEx的代码如下:

让FX1.1的NotifyIcon支持BalloonTip(2)

using System;

让FX1.1的NotifyIcon支持BalloonTip(2)
让FX1.1的NotifyIcon支持BalloonTip(2)

namespace Birdshome

让FX1.1的NotifyIcon支持BalloonTip(2)

{

让FX1.1的NotifyIcon支持BalloonTip(2)

    /// <summary>

让FX1.1的NotifyIcon支持BalloonTip(2)

    /// Summary description for NotifyIconEx.

让FX1.1的NotifyIcon支持BalloonTip(2)

    /// </summary>

让FX1.1的NotifyIcon支持BalloonTip(2)

    public class NotifyIconEx : NotifyIcon

让FX1.1的NotifyIcon支持BalloonTip(2)

    {

让FX1.1的NotifyIcon支持BalloonTip(2)

        private const int WM_BALLOONTIPSHOWN = 0x0402;

让FX1.1的NotifyIcon支持BalloonTip(2)

        private const int WM_BALLOONTIPCLOSING = 0x0403;

让FX1.1的NotifyIcon支持BalloonTip(2)

        private const int WM_BALLOONTIPCLOSED = 0x0404;

让FX1.1的NotifyIcon支持BalloonTip(2)

        private const int WM_BALLOONTIPCLICKED = 0x0405;

让FX1.1的NotifyIcon支持BalloonTip(2)
让FX1.1的NotifyIcon支持BalloonTip(2)

        private static readonly object EVENT_BALLOONTIPSHOWN;

让FX1.1的NotifyIcon支持BalloonTip(2)

        private static readonly object EVENT_BALLOONTIPCLOSED;

让FX1.1的NotifyIcon支持BalloonTip(2)

        private static readonly object EVENT_BALLOONTIPCLICKED;

让FX1.1的NotifyIcon支持BalloonTip(2)
让FX1.1的NotifyIcon支持BalloonTip(2)

        static NotifyIconEx()

让FX1.1的NotifyIcon支持BalloonTip(2)

        {

让FX1.1的NotifyIcon支持BalloonTip(2)

            NotifyIconEx.EVENT_BALLOONTIPSHOWN = new object();

让FX1.1的NotifyIcon支持BalloonTip(2)

            NotifyIconEx.EVENT_BALLOONTIPCLOSED = new object();

让FX1.1的NotifyIcon支持BalloonTip(2)

            NotifyIconEx.EVENT_BALLOONTIPCLICKED = new object();

让FX1.1的NotifyIcon支持BalloonTip(2)

        }

让FX1.1的NotifyIcon支持BalloonTip(2)
让FX1.1的NotifyIcon支持BalloonTip(2)

        public NotifyIconEx()

让FX1.1的NotifyIcon支持BalloonTip(2)
让FX1.1的NotifyIcon支持BalloonTip(2)

            //

让FX1.1的NotifyIcon支持BalloonTip(2)

            // TODO: Add constructor logic here

让FX1.1的NotifyIcon支持BalloonTip(2)
让FX1.1的NotifyIcon支持BalloonTip(2)
让FX1.1的NotifyIcon支持BalloonTip(2)
让FX1.1的NotifyIcon支持BalloonTip(2)

        public event EventHandler BalloonTipShown

让FX1.1的NotifyIcon支持BalloonTip(2)
让FX1.1的NotifyIcon支持BalloonTip(2)
让FX1.1的NotifyIcon支持BalloonTip(2)
让FX1.1的NotifyIcon支持BalloonTip(2)

        public event EventHandler BalloonTipClosed

让FX1.1的NotifyIcon支持BalloonTip(2)
让FX1.1的NotifyIcon支持BalloonTip(2)
让FX1.1的NotifyIcon支持BalloonTip(2)
让FX1.1的NotifyIcon支持BalloonTip(2)

        public event EventHandler BalloonTipClicked

让FX1.1的NotifyIcon支持BalloonTip(2)
让FX1.1的NotifyIcon支持BalloonTip(2)
让FX1.1的NotifyIcon支持BalloonTip(2)
让FX1.1的NotifyIcon支持BalloonTip(2)

        public void ShowBalloonTip(InfoIcon infoIcon, string title, string message, uint timeout)

让FX1.1的NotifyIcon支持BalloonTip(2)
让FX1.1的NotifyIcon支持BalloonTip(2)

            nid.uFlags = 0x0010;

让FX1.1的NotifyIcon支持BalloonTip(2)

            nid.dwInfoFlags = (int)infoIcon;

让FX1.1的NotifyIcon支持BalloonTip(2)

            nid.szInfo = message;

让FX1.1的NotifyIcon支持BalloonTip(2)

            nid.szInfoTitle = title;

让FX1.1的NotifyIcon支持BalloonTip(2)

            nid.uTimeoutOrVersion = timeout;

让FX1.1的NotifyIcon支持BalloonTip(2)

            base.UpdateIcon(true);

让FX1.1的NotifyIcon支持BalloonTip(2)
让FX1.1的NotifyIcon支持BalloonTip(2)
让FX1.1的NotifyIcon支持BalloonTip(2)

        private void OnBalloonTipShown()

让FX1.1的NotifyIcon支持BalloonTip(2)
让FX1.1的NotifyIcon支持BalloonTip(2)
让FX1.1的NotifyIcon支持BalloonTip(2)
让FX1.1的NotifyIcon支持BalloonTip(2)

        private void OnBalloonTipClosed()

让FX1.1的NotifyIcon支持BalloonTip(2)
让FX1.1的NotifyIcon支持BalloonTip(2)
让FX1.1的NotifyIcon支持BalloonTip(2)
让FX1.1的NotifyIcon支持BalloonTip(2)

        private void OnBalloonTipClicked()

让FX1.1的NotifyIcon支持BalloonTip(2)
让FX1.1的NotifyIcon支持BalloonTip(2)
让FX1.1的NotifyIcon支持BalloonTip(2)
让FX1.1的NotifyIcon支持BalloonTip(2)

        protected override void WndProc(ref System.Windows.Forms.Message msg)

让FX1.1的NotifyIcon支持BalloonTip(2)
让FX1.1的NotifyIcon支持BalloonTip(2)
让FX1.1的NotifyIcon支持BalloonTip(2)

    }

让FX1.1的NotifyIcon支持BalloonTip(2)

}

为了尽可能的利用原来的NotifyIcon中的代码,不做太大的改动。新的NotifyIcon中修改了UpdateIcon方法中uFlags的管理。原来的代码是在调用UpdateIcon时给uFlags赋值为0x0001(即:NIF_MESSAGE),然后再通过一些判断通过|操作加入新的flag。现在把第一次赋值改为了:uFlags|=0x0001,目的是为了把ShowBalloonTip中对uFlags的赋值传递进取。但是如果在显示了Balloon

Tip后,uFlags中仍然保持了0x0010(即:NIF_INFO)标志位,那么只要NotifyIcon中移执行UpdateIcon就会再次显示Balloon

Tip

让FX1.1的NotifyIcon支持BalloonTip(2)

。所以在UpdateIcon方法的最后,我们清除uFlags中的0x0010标识位,让uFlag ^= 0x0010;,就这样简单NotifyIcon即改造完毕。

    新鲜出炉的NotifyIcon控件,使用方便,价格公道,童叟无欺

让FX1.1的NotifyIcon支持BalloonTip(2)

本文转自博客园鸟食轩的博客,原文链接:http://www.cnblogs.com/birdshome/,如需转载请自行联系原博主。