Windows7 任务栏功能的开发
2009-10-02 00:47
281 查看
此篇文章为原创,禁止转载
此篇文章仅限于C++,托管代码开发请参考Windows API Code Pack for the Microsoft .NET Framework。
本文参考至: MSDN dd942846
我的上一篇文章讨论了如何针对Vista的窗体透明进行编程开发,今天来讨论下Windows7的特色——任务栏开发。
Windows7为窗口增加了一个属性:application ID(应用程序ID)。这个ID可以是任意128个字符,推荐包括公司名,产品名和应用程序名。拥有相同应用程序ID的窗口将会被归类到同一个任务栏按钮上。
为进程设置应用程序ID需要调用Win32 API SetCurrentProcessExplicitAppUserModelID,它包含在shell32.dll中。为窗口设置应用程序ID则需要调用SHGetPropertyStoreForWindow 函数并且运用IPropertyStore接口,如下:
PROPVARIANT pv;
InitPropVariantFromString(L"MyAppID", &pv);
IPropertyStore* pps;
VERIFY(SHGetPropertyStoreForWindow(hwnd, IID_PPV_ARGS(&pps)));
VERIFY(pps->SetValue(PKEY_AppUserModel_ID, pv));
VERIFY(pps->Commit());
这是设置应用程序ID的代码。
我们可以通过注册任务栏按钮创建的窗口消息来得到相关消息通知:
uint wmTBC = RegisterWindowMessage(_T("TaskbarButtonCreated"));
这样在任务栏按钮创建后你的窗口过程会收到wmTBC的消息。这个消息收到以后可以使用COM的接口来管理任务栏的相关特性。
创建ITaskbarList3接口:
ITaskbarList3* ptl;
VERIFY(CoCreateInstance(
CLSID_TaskbarList, NULL, CLSCTX_ALL,
IID_ITaskbarList3, (void**)&ptl));
有了ITaskbarList3接口我们可以:
1、通过ITaskbarList3::SetOverlayIcon方法设置任务栏图标与关联提示。
2、通过ITaskbarList3::SetProgressState方法设置任务栏表现进度条的状态。与ITaskbarList3::SetProgressValue方法设置任务栏进度条的进度。
更重要的功能是Thumbnail(微软将鼠标悬浮在任务栏按钮后所弹出的窗口缩微图上的工具栏成为Thumbnail,可参考Windows Media Player播放时),这个功能可以使用户不切换到你的窗口即可以调用你程序内的功能。
通过ITaskbarList3::ThumbBarAddButtons 与ITaskbarList3::ThumbBarUpdateButtons俩个方法来管理这个“小工具条”上的按钮,大家应该从字面上能理解他们的功能。
更详细的信息请参考:Windows 7 Taskbar: Thumbnail Toolbars。
最后一个特色是Jump List,一个当鼠标悬浮在任务栏按钮上时弹出的系统菜单附加项列表。可以参考Windows Live Messenger的Jump List。
如果你的应用程序时一个处理文件的程序,想要在这个列表中出现你常用的文件历史记录,需要以下两个步骤:
1、在注册表注册了自己的文件类型与文件关联。
2、使用公共文件对话框保存、打开文件。
有一点要提一下,你的文档处理应用程序应该知道用户通过右击这个Jump List上面的条目选择删除所去掉的历史列表,这样应用程序内才能和Jump List同步。下面代码用来获取这些删除后的列表。
ICustomDestinationList* cdl;
VERIFY(CoCreateInstance(CLSID_DestinationList, ..., IID_ICustomDestinationList, (void**)cdl));
IObjectArray* removedItems;
cdl->BeginList(&maxSlots, IID_IObjectArray, (void**)removedItems);
//…Iterate removedItems and make decisions
removedItems->Release();
此篇文章仅限于C++,托管代码开发请参考Windows API Code Pack for the Microsoft .NET Framework。
本文参考至: MSDN dd942846
我的上一篇文章讨论了如何针对Vista的窗体透明进行编程开发,今天来讨论下Windows7的特色——任务栏开发。
Windows7为窗口增加了一个属性:application ID(应用程序ID)。这个ID可以是任意128个字符,推荐包括公司名,产品名和应用程序名。拥有相同应用程序ID的窗口将会被归类到同一个任务栏按钮上。
为进程设置应用程序ID需要调用Win32 API SetCurrentProcessExplicitAppUserModelID,它包含在shell32.dll中。为窗口设置应用程序ID则需要调用SHGetPropertyStoreForWindow 函数并且运用IPropertyStore接口,如下:
PROPVARIANT pv;
InitPropVariantFromString(L"MyAppID", &pv);
IPropertyStore* pps;
VERIFY(SHGetPropertyStoreForWindow(hwnd, IID_PPV_ARGS(&pps)));
VERIFY(pps->SetValue(PKEY_AppUserModel_ID, pv));
VERIFY(pps->Commit());
这是设置应用程序ID的代码。
我们可以通过注册任务栏按钮创建的窗口消息来得到相关消息通知:
uint wmTBC = RegisterWindowMessage(_T("TaskbarButtonCreated"));
这样在任务栏按钮创建后你的窗口过程会收到wmTBC的消息。这个消息收到以后可以使用COM的接口来管理任务栏的相关特性。
创建ITaskbarList3接口:
ITaskbarList3* ptl;
VERIFY(CoCreateInstance(
CLSID_TaskbarList, NULL, CLSCTX_ALL,
IID_ITaskbarList3, (void**)&ptl));
有了ITaskbarList3接口我们可以:
1、通过ITaskbarList3::SetOverlayIcon方法设置任务栏图标与关联提示。
2、通过ITaskbarList3::SetProgressState方法设置任务栏表现进度条的状态。与ITaskbarList3::SetProgressValue方法设置任务栏进度条的进度。
更重要的功能是Thumbnail(微软将鼠标悬浮在任务栏按钮后所弹出的窗口缩微图上的工具栏成为Thumbnail,可参考Windows Media Player播放时),这个功能可以使用户不切换到你的窗口即可以调用你程序内的功能。
通过ITaskbarList3::ThumbBarAddButtons 与ITaskbarList3::ThumbBarUpdateButtons俩个方法来管理这个“小工具条”上的按钮,大家应该从字面上能理解他们的功能。
更详细的信息请参考:Windows 7 Taskbar: Thumbnail Toolbars。
最后一个特色是Jump List,一个当鼠标悬浮在任务栏按钮上时弹出的系统菜单附加项列表。可以参考Windows Live Messenger的Jump List。
如果你的应用程序时一个处理文件的程序,想要在这个列表中出现你常用的文件历史记录,需要以下两个步骤:
1、在注册表注册了自己的文件类型与文件关联。
2、使用公共文件对话框保存、打开文件。
有一点要提一下,你的文档处理应用程序应该知道用户通过右击这个Jump List上面的条目选择删除所去掉的历史列表,这样应用程序内才能和Jump List同步。下面代码用来获取这些删除后的列表。
ICustomDestinationList* cdl;
VERIFY(CoCreateInstance(CLSID_DestinationList, ..., IID_ICustomDestinationList, (void**)cdl));
IObjectArray* removedItems;
cdl->BeginList(&maxSlots, IID_IObjectArray, (void**)removedItems);
//…Iterate removedItems and make decisions
removedItems->Release();
相关文章推荐
- Windows7中如何禁用ie8/ie9在任务栏中的多标签预览功能
- Windows7中如何禁用ie8/ie9在任务栏中的多标签预览功能
- [技巧] 关闭Windows7任务栏预览功能 - 绝对有效
- 找回Windows7的“将此程序锁定到任务栏”功能(Pin to Taskbar / Pin to Start Menu)
- 趣味开发 - 利用百度翻译实现文字转语音功能
- React Native布局实践:开发京东客户端首页(四)——首页功能按钮及控件封装
- asp.net ajax 使用AutoCompleteExtender开发自动完成功能(转载)
- 【Android应用开发】-(13)屏幕截图功能--截取全屏,无需Root(附源码)
- Scanner开发常用功能
- 【Android应用开发】-(13)屏幕截图功能--截取全屏,无需Root(附源码)
- Android开发笔记之广播,service实现音乐的播放暂停停止快进等功能
- 百度地图开发-检索功能
- PHP实现微信开发中提现功能(企业付款到用户零钱)
- ZP的EXTJS学习笔记(三)——邮箱功能的开发(按钮事件、下拉框、分页、record小图标、整条数据格式处理、定时刷新、record复选删除、分组)
- 音视频即时通讯开发功能介绍
- 使用air进行移动app开发常见功能和问题(二)
- 微信公众平台开发(五) 天气预报功能开发
- 通过 spring 容器内建的 profile 功能实现开发环境、测试环境、生产环境配置自动切换
- Android开发 实现图文混排功能
- 微信公众平台开发(八) 自定义菜单功能开发