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

简介:

在这个文章的(1)中,我本来打算完全自己实现一个支持Balloon Tip的NotifyIcon控件。后来发现实现NotifyIcon控件的大量代码都纠缠在事件的处理和包装上面,太没有写头了,简直就像打劫一样没有技术含量了emembarrassed.gif。于是干脆一不做二不休,就用NotifyIcon Reflect出来的代码做基类来实现支持Balloon Tip得了。

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

    派生类NotifyIconEx的代码如下:

None.gif using System;
None.gif
None.gif namespace Birdshome
ExpandedBlockStart.gif {
ExpandedSubBlockStart.gif    /// <summary>
InBlock.gif    
/// Summary description for NotifyIconEx.
ExpandedSubBlockEnd.gif    
/// </summary>
InBlock.gif    public class NotifyIconEx : NotifyIcon
ExpandedSubBlockStart.gif    {
InBlock.gif        private const int WM_BALLOONTIPSHOWN = 0x0402;
InBlock.gif        private const int WM_BALLOONTIPCLOSING = 0x0403;
InBlock.gif        private const int WM_BALLOONTIPCLOSED = 0x0404;
InBlock.gif        private const int WM_BALLOONTIPCLICKED = 0x0405;
InBlock.gif
InBlock.gif        private static readonly object EVENT_BALLOONTIPSHOWN;
InBlock.gif        private static readonly object EVENT_BALLOONTIPCLOSED;
InBlock.gif        private static readonly object EVENT_BALLOONTIPCLICKED;
InBlock.gif
InBlock.gif        static NotifyIconEx()
ExpandedSubBlockStart.gif        {
InBlock.gif            NotifyIconEx.EVENT_BALLOONTIPSHOWN = new object();
InBlock.gif            NotifyIconEx.EVENT_BALLOONTIPCLOSED = new object();
InBlock.gif            NotifyIconEx.EVENT_BALLOONTIPCLICKED = new object();
ExpandedSubBlockEnd.gif        }
InBlock.gif
InBlock.gif        public NotifyIconEx()
ExpandedSubBlockStart.gif        {
InBlock.gif            //
InBlock.gif            
// TODO: Add constructor logic here
InBlock.gif            
//
ExpandedSubBlockEnd.gif
        }
InBlock.gif
InBlock.gif        public event EventHandler BalloonTipShown
ContractedSubBlock.gif        dot.gif
InBlock.gif
InBlock.gif        public event EventHandler BalloonTipClosed
ContractedSubBlock.gif        dot.gif
InBlock.gif    
InBlock.gif        public event EventHandler BalloonTipClicked
ContractedSubBlock.gif        dot.gif
InBlock.gif
InBlock.gif        public void ShowBalloonTip(InfoIcon infoIcon, string title, string message, uint timeout)
ExpandedSubBlockStart.gif        {
InBlock.gif            nid.uFlags = 0x0010;
InBlock.gif            nid.dwInfoFlags = (int)infoIcon;
InBlock.gif            nid.szInfo = message;
InBlock.gif            nid.szInfoTitle = title;
InBlock.gif            nid.uTimeoutOrVersion = timeout;
InBlock.gif            base.UpdateIcon(true);
ExpandedSubBlockEnd.gif        }
InBlock.gif
InBlock.gif        private void OnBalloonTipShown()
ContractedSubBlock.gif        dot.gif
InBlock.gif
InBlock.gif        private void OnBalloonTipClosed()
ContractedSubBlock.gif        dot.gif
InBlock.gif
InBlock.gif        private void OnBalloonTipClicked()
ContractedSubBlock.gif        dot.gif
InBlock.gif
InBlock.gif        protected override void WndProc(ref System.Windows.Forms.Message msg)
ContractedSubBlock.gif        dot.gif
ExpandedSubBlockEnd.gif    }
ExpandedBlockEnd.gif}


    为了尽可能的利用原来的NotifyIcon中的代码,不做太大的改动。新的NotifyIcon中修改了UpdateIcon方法中uFlags的管理。原来的代码是在调用UpdateIcon时给uFlags赋值为0x0001(即:NIF_MESSAGE),然后再通过一些判断通过|操作加入新的flag。现在把第一次赋值改为了:uFlags|=0x0001,目的是为了把ShowBalloonTip中对uFlags的赋值传递进取。但是如果在显示了Balloon Tip后,uFlags中仍然保持了0x0010(即:NIF_INFO)标志位,那么只要NotifyIcon中移执行UpdateIcon就会再次显示Balloon Tipemdgust.gif。所以在UpdateIcon方法的最后,我们清除uFlags中的0x0010标识位,让uFlag ^= 0x0010;,就这样简单NotifyIcon即改造完毕。

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


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

目录
相关文章
|
2月前
|
JavaScript API 开发工具
uni.app cell的用法以及相关api
uni.app cell的用法以及相关api
26 0
|
2月前
|
传感器 人工智能 网络协议
MQTT.fx的安装和使用
MQTT.fx的安装和使用
106 0
|
10月前
|
网络协议 中间件 C语言
STM32 Cube mx 安装
STM32 Cube mx 安装
80 0
|
11月前
|
存储 编解码 图形学
cocos2dx如何让label支持合批
cocos2dx如何让label支持合批
309 0
|
Java 开发工具 Android开发
RK3128 Android 7 BOX SDK 修改为MID界面
RK3128 Android 7 BOX SDK 修改为MID界面
622 0
RK3128 Android 7 BOX SDK 修改为MID界面
|
Java Shell 开发工具
RK3128 Android 7 BOX SDK 修改为MID界面-近期任务
RK3128 Android 7 BOX SDK 修改为MID界面-近期任务
294 0
RK3128 Android 7 BOX SDK 修改为MID界面-近期任务
|
Web App开发 Linux 内存技术
FireFox 64位不支持NPAPI插件,不论是32位还是64位
FireFox 64位不支持NPAPI插件,不论是32位还是64位
173 0
|
Web App开发
FireFox 32不支持64位的NPAPI dll插件
FireFox 32不支持64位的NPAPI dll插件
97 0
|
自然语言处理
Cocos2dx接入Qt后,Text使用TTF显示异常
Cocos2dx接入Qt后,Text使用TTF显示异常
98 0
|
Web App开发
FireFox支持NPAPI接口,最新版本是52.9,53已经不支持了
FireFox支持NPAPI接口,最新版本是52.9,53已经不支持了
196 0

热门文章

最新文章