Windows 7程序开发系列之一(任务栏篇)

本文详细介绍了如何利用Windows 7 SDK进行程序开发,重点讲解了如何实现任务栏的Progress Bar、Overlay Icon、缩略图工具栏、信息提示和Aero Peek预览等功能。通过实例代码展示了如何创建ITaskbarList4接口对象、设置进度条和覆盖图标、添加缩略图工具栏按钮并响应其点击事件,以及如何自定义缩略图和Aero Peek预览。
摘要由CSDN通过智能技术生成


       Windows 7 引入了很多新特性,其中最直观的莫过于用户界面上的变化。很多人也因为不能适应这种变化而回到了XP。但是在我看来这些新的特性却是一种进步,使用了一段时间之后,也萌生了要做一点开发的冲动。于是把以前一个电源管理的小软件重写了一次(点此下载 ),利用了Windows 7 的任务栏特性和JumpList。

       关于Windows 7开发的中文资料比较少。微软官方的教程还比较丰富,但都是英文的,可能某些英文不太好的朋友学起来比较吃力。我把任务栏和JumpList这两个方面做一个简短的教程,希望对后来者有所帮助。


      任务栏方面的东西比JumpList稍微简单一点,就先从任务栏说起。Windows7的任务栏包含了几个新的特性:Progress Bar(进度条)、Overlay Icon(覆盖图标)、 Thumbnail(缩略图)、Thumbnail Toolbar(位于缩略图下方的工具栏)、Tooltip(鼠标指向时的提示信息)、Aero Peek Preview(当鼠标停放在缩略图上时显示窗口预览)。下面是一张foobar2000运行时的截图:


       上图中foobar2000使用Progress Bar显示当前歌曲的播放进度,并且在右下角有一个白色的小三角形(Overlay Icon)显示当前是播放还是暂停,使用Thumbnail显示唱片封面,Thumbnail Toolbar有三个按钮分别是上一曲、暂停、下一曲,上方的Tooltip提示当前播放曲目,当鼠标放在缩略图上时,Aero Peek功能会隐藏所有窗口,只显示当前窗口的预览图。上面的Progress Bar和Overlay Icon不太清晰,下面的比较清晰:

     这篇文章中,将会讲解这些功能的开发。


一、Windows7 SDK的安装

       MSDN上很容易找到SDK的下载地址,我就不贴了。SDK有1.44G,下载需要一点时间。安装过程也没什么可讲,就是安装完后在开始菜单中找到Microsoft Windows SDK v7.0->Visual Studio Registration->Windows SDK Configuration Tool,将v7.0设置为当前版本,这样VS中的Windows SDK将使用v7.0版。

二、创建ITaskbarList4接口对象

       与任务栏按钮相关的功能都在这个接口中,Progress Bar, Overlay Icon等。首先创建一个Win32项目,并创建一个简单的窗口,具体不再赘述,文章末尾会给出代码。在WinMain函数的开头,注册一个"TaskbarButtonCreated"的消息,

//注册用户消息
WM_TASKBARBUTTONCREATED = :: RegisterWindowMessage (TEXT ("TaskbarButtonCreated" ));

这样我们在WndProc中就可以收到我们注册的 WM_TASKBARBUTTONCREATED 消息了。在这个消息中,创建 ITaskbarList4 接口对象,并调用初始化方法。至于COM相关的内容,已经超出了本教程的范围,有兴趣的可以参考相关资料。

//创建接口对象 ITaskbarList
if (msg == WM_TASKBARBUTTONCREATED )
{
    :: CoCreateInstance (CLSID_TaskbarList , NULL , CLSCTX_INPROC_SERVER , IID_PPV_ARGS (& g_pTaskbar ));
    g_pTaskbar -> HrInit ();
}

三、 设置进度条和覆盖图标(Progress Bar, Overlay Icon)

      SetProgressState 方法设置进度条的状态,实际反映出来就是进度条的颜色,它接受一个窗口句柄和一个状态标记为参数。其中 TBPF_NOPROGRESS 为取消进度条, TBPF_INDETERMINATE 是一个不断滚动的,无确定值的进度条。

      SetProgressValue 方法设置进度条的值,也就是当前进度。它的参数是窗口句柄、当前值和总值。如果用这个方法设置了进度条,之前设置的TBPF_INDETERMINATE 将无效。

      SetOverlayIcon 设置覆盖图标,他的参数是窗口句柄、图标句柄和描述。其中图标要求16X16大小。如果图标句柄为NULL,则取消覆盖图标。

      在g_pTaskbar对象初始化后,加入下面代码:

g_pTaskbar -> SetProgressState (g_hWnd , TBPF_ERROR );
g_pTaskbar -> SetProgressValue (g_hWnd , 50 , 100 );
g_pTaskbar -> SetOverlayIcon (g_hWnd , g_hRed , TEXT ("Error" ));

     这段代码将进度条状态设置为ERROR(红色),进度为50%,并在右下角显示一个红色图标(图标已在WinMain函数中加载)。运行后效果如下:

四、 缩略图工具栏和信息提示(Thumbnail Toolbar, Tooltip)

       Toolbar稍微麻烦一点,需要设置一个结构THUMBBUTTON 。其中参数dwMask 是一些标记的组合,这里我们设置为THB_ICON | THB_TOOLTIP ,即我们会使用icon和tooltip这两个字段(注意此处的tooltip是按钮的tooltip,不要与上面的tooltip混淆了)。iId 关系到事件的响应,可按顺序编号。hIcon 是该按钮使用的图标句柄。szTip 中设置提示信息。使用下面的代码增加3个按钮:

THUMBBUTTONMASK dwMask = THB_ICON | THB_TOOLTIP ;
THUMBBUTTON thbButtons [ 3 ];
thbButtons
[ 0 ]. dwMask = dwMask ;
thbButtons [ 0 ]. iId = 0 ;
thbButtons [ 0 ]. hIcon = g_hRed ;
StringCbCopy (thbButtons [ 0 ]. szTip , sizeof (thbButtons [ 0 ]. szTip ), TEXT ("Red" ));
thbButtons
[ 1 ]. dwMask = dwMask ;
thbButtons [ 1 ]. iId = 1 ;
thbButtons [

评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值