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

本文介绍了一种改进的NotifyIcon控件实现,该控件增加了BalloonTip通知功能。通过继承自原始NotifyIcon类并最小化修改,实现了控件的增强功能。新增的NotifyIconEx类简化了BalloonTip的通知过程。

在这个文章的(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/,如需转载请自行联系原博主。

内容概要:本文系统介绍了算术优化算法(AOA)的基本原理、核心思想及Python实现方法,并通过图像分割的实际案例展示了其应用价值。AOA是一种基于种群的元启发式算法,其核心思想来源于四则运算,利用乘除运算进行全局勘探,加减运算进行局部开发,通过数学优化器加速函数(MOA)和数学优化概率(MOP)动态控制搜索过程,在全局探索与局部开发之间实现平衡。文章详细解析了算法的初始化、勘探与开发阶段的更新策略,并提供了完整的Python代码实现,结合Rastrigin函数进行测试验证。进一步地,以Flask框架搭建前后端分离系统,将AOA应用于图像分割任务,展示了其在实际工程中的可行性与高效性。最后,通过收敛速度、寻优精度等指标评估算法性能,并提出自适应参数调整、模型优化和并行计算等改进策略。; 适合人群:具备一定Python编程基础和优化算法基础知识的高校学生、科研人员及工程技术人员,尤其适合从事人工智能、图像处理、智能优化等领域的从业者;; 使用场景及目标:①理解元启发式算法的设计思想与实现机制;②掌握AOA在函数优化、图像分割等实际问题中的建模与求解方法;③学习如何将优化算法集成到Web系统中实现工程化应用;④为算法性能评估与改进提供实践参考; 阅读建议:建议读者结合代码逐行调试,深入理解算法流程中MOA与MOP的作用机制,尝试在不同测试函数上运行算法以观察性能差异,并可进一步扩展图像分割模块,引入更复杂的预处理或后处理技术以提升分割效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值