用C++Builder实现任务栏图标动画效果

C++ Builder 专栏收录该内容
12 篇文章 0 订阅


主页:http://www.maxss.net
邮件:maxchou@163.com


  Windows平台为应用程序提供许多的特色功能,任务图栏就是一个非常实用和经典的一个。它不但可以节省任务栏的空间,还可以通过不同的图标或动画效果来说明程序的当前状态等的信息。Windows里没有直接提供任务栏图标动画效果的支持,所以要自己通过编码实现,在这篇文章里大家可以看到其中一种实现任务栏图标动画效果的方法。

  首先要了解一下有关任务栏图标编程的知识,要实现对任务栏图标的控制主要是通过Shell_NotifyIcon()函数进行。该函数的API声明如下:

BOOL Shell_NotifyIcon(
    DWORD dwMessage, 
    PNOTIFYICONDATA lpdata
);

  参数dwMessage是指定进行什么样的动作,可选值有:NIM_ADD, NIM_DELETE, NIM_MODIFY, NIM_SETFOCUS, NIM_SETVERSION,分别代表为:添加、删除、修改、获得焦点、设置版本号,对于NIM_SETFOCUS,NIM_SETVERSION一般比较少用,我们最常使用的主要是NIM_ADD ,NIM_DELETE, NIM_MODIFY。

  另一个参数lpdata是一个 NOTIFYICONDATA结构的指针,这个结构内容比较多,定义如下:
typedef struct _NOTIFYICONDATA { 
    DWORD cbSize; 
    HWND hWnd; 
    UINT uID; 
    UINT uFlags; 
    UINT uCallbackMessage; 
    HICON hIcon; 
    #if (_WIN32_IE < 0x0500)
        TCHAR szTip[64];
    #else
        TCHAR szTip[128];
    #endif
    #if (_WIN32_IE >= 0x0500)
        DWORD dwState; 
        DWORD dwStateMask; 
        TCHAR szInfo[256]; 
        union {
            UINT  uTimeout; 
            UINT  uVersion; 
        } DUMMYUNIONNAME;
        TCHAR szInfoTitle[64]; 
        DWORD dwInfoFlags; 
    #endif
    #if (_WIN32_IE >= 0x600)
        GUID guidItem;
    #endif
} NOTIFYICONDATA, *PNOTIFYICONDATA; 

  在这里我们主要留意上面粗体的成员 cbSize, hWnd, uID, uFlags, uCallbackMessage, hIcon, szTip等的内容及用法。分别代表的意思是:结构体大小,窗口句柄,图标标识,回调函数,所包含的内容标志,图标句柄,文本提示。

  我们要定义自己的通知消息和图标标识来进行处理,内容如下:(这些内容在窗体的头文件中定义)
const int WM_NC_NOTIFY = (WM_USER + 1); // 自定义的通知消息
const int WM_NC_TRAYID = (WM_USER + 2); // 自定义的图标标识

  一般情况下,都是在用户把应用程序最小化后才在任务栏显示小图标,所以我们还必须捕获系统消息 WM_SYSCOMMAND中wParam参数所带最小化命令,然后再进行有关的处理。另外最重要的就是要捕获自定义通知消息WM_NC_NOTIFY了,这些内容定义如下:(在窗体类的private内定义)
BEGIN_MESSAGE_MAP
	VCL_MESSAGE_HANDLER(WM_SYSCOMMAND, TMessage, WMSysCommand);
	VCL_MESSAGE_HANDLER(WM_NC_NOTIFY, TMessage, WMNCNotify)
END_MESSAGE_MAP(TForm)

  为了要实现动画效果,我们就需要有一个ImageList和Timer对象。ImageList中存放了每一帧的图标,Timer是定时改变 NOTIFYICONDATA结构中的图标句柄来实现动画效果。主要建立几个功能函数实现,分别是添加图标AddTrayIcon(),修改图标ModifyTrayIcon(),删除图标DeleteTrayIcon()。

  至于具体功能的实现细节这里就不费笔墨了,大家可以 下载任务栏图标动画示例源码进行查看,该示例在BCB6 + Windows 2000下编译通过。欢迎交流!
  • 0
    点赞
  • 0
    评论
  • 1
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

相关推荐
<p> <span style="font-size:14px;color:#337FE5;">【为什么学爬虫?】</span> </p> <p> <span style="font-size:14px;">       1、爬虫入手容易,但是深入较难,如何写出高效率的爬虫,如何写出灵活性高可扩展的爬虫都是一项技术活。另外在爬虫过程中,经常容易遇到被反爬虫,比如字体反爬、IP识别、验证码等,如何层层攻克难点拿到想要的数据,这门课程,你都能学到!</span> </p> <p> <span style="font-size:14px;">       2、如果是作为一个其他行业的开发者,比如app开发,web开发,学习爬虫能让你加强对技术的认知,能够开发出更加安全的软件和网站</span> </p> <p> <br /> </p> <span style="font-size:14px;color:#337FE5;">【课程设计】</span> <p class="ql-long-10663260"> <span> </span> </p> <p class="ql-long-26664262" style="font-size:11pt;color:#494949;"> 一个完整的爬虫程序,无论大小,总体来说可以分成三个步骤,分别是: </p> <ol> <li class="" style="font-size:11pt;color:#494949;"> 网络请求:模拟浏览器的行为从网上抓取数据。 </li> <li class="" style="font-size:11pt;color:#494949;"> 数据解析:将请求下来的数据进行过滤,提取我们想要的数据。 </li> <li class="" style="font-size:11pt;color:#494949;"> 数据存储:将提取到的数据存储到硬盘或者内存中。比如mysql数据库或者redis等。 </li> </ol> <p class="ql-long-26664262" style="font-size:11pt;color:#494949;"> 那么本课程也是按照这几个步骤循序渐进的进行讲解,带领学生完整的掌握每个步骤的技术。另外,因为爬虫的多样性,在爬取的过程中可能会发生被反爬、效率低下等。因此我们又增加了两个章节来提高爬虫程序的灵活性,分别是: </p> <ol> <li class="" style="font-size:11pt;color:#494949;"> 爬虫进阶:包括IP代理,多线程爬虫,图形验证码识别、JS加密解密、动态网页爬虫、字体反爬识别等。 </li> <li class="" style="font-size:11pt;color:#494949;"> Scrapy和分布式爬虫:Scrapy框架、Scrapy-redis组件、分布式爬虫等。 </li> </ol> <p class="ql-long-26664262" style="font-size:11pt;color:#494949;"> 通过爬虫进阶的知识点我们能应付大量的反爬网站,而Scrapy框架作为一个专业的爬虫框架,使他可以快速提高我们编写爬虫程序的效率和速度。另外如果一台机器不能满足你的需求,我们可以分布式爬虫让多台机器帮助你快速爬取数据。 </p> <p style="font-size:11pt;color:#494949;">   </p> <p class="ql-long-26664262" style="font-size:11pt;color:#494949;"> 从基础爬虫到商业化应爬虫,本套课程满足您的所有需求! </p> <p class="ql-long-26664262" style="font-size:11pt;color:#494949;"> <br /> </p> <p> <br /> </p> <p> <span style="font-size:14px;background-color:#FFFFFF;color:#337FE5;">【课程服务】</span> </p> <p> <span style="font-size:14px;">专属付费社群+定期答疑</span> </p> <p> <br /> </p> <p class="ql-long-24357476"> <span style="font-size:16px;"><br /> </span> </p> <p> <br /> </p> <p class="ql-long-24357476"> <span style="font-size:16px;"></span> </p>
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值