一个体验好的Windows 任务栏缩略图开发心得
2021-07-09 10:05
标签:探讨 span 示例 好的 alt attr win10 back otto 本文来自网易云社区
作者:孙有军
前言:
对于一个追求极致体验的软件来说,利用好系统的每一点优秀的特性,将会大大提高软件的品质。 Windows vista以来任务栏缩略图,及Win + TAB的程序切换预览图的定制也是对软件体验的一个巨大提升,这里我对云音乐中使用到的任务栏缩率图显示专辑封面,并且控制播放歌曲操作的开发做下简单的分享。
缩略图的显示图片和按钮定制:
Windows对缩略图的操作,主要会涉及到DWM (Desktop Window Manager 桌面窗口管理器)的相关知识,有兴趣的可以详细研究下。
1)打开缩略图显示图片的属性设置:
指定窗口缩略图显示图片时必须打开该窗口的 DWMWA_HAS_ICONIC_BITMAP,DWMWA_FORCE_ICONIC_REPRESENTATION的属性设置,否则任务栏缩略图将无法生效。简单的示例代码: 2)实际设置图片:
可以指定任意的图片了。 但是要注意的是它是由图片大小限制的,一般是小于等于120*120
WM_DWMSENDICONICTHUMBNAIL 这个的窗口消息回调用会回调预览图片的大小的。
注意可能的问题:设置超过限制大小的图片就无法显示。但是WM_DWMSENDICONICTHUMBNAIL 这个回调并不会一开始就进行回调的,可能需要多次尝试,特别是win10的机器上,缩略图设置需要多次尝试
3)按钮定制: 缩略图上的按钮是通过获取COM组件
CLSID_TaskbarList得到ITaskbarList
实例 进行设置
taskbarlist->ThumbBarAddButtons(hwnd, btn_index, thumb_btn);
taskbarlist
->ThumbBarUpdateButtons(hwnd,
btn_index
,thumb_btn);
这样简单的缩略图预览就成型了:
然而文章到这里并未结束,当我们用win+tab切换程序时 你会看到切换动画里面的图片竟然就是一张图片, 让我们看看我们的程序有多么的突兀,如果在众多的窗口里面那么久显的更加怪异了:
之所以会造成这样的问题是指定使用图片进行开关的时候,系统会自动把设置的图片作为win+tab程序切换的预览图,并且通过修改其余的参数无法改正。
下面是解决的一种途径:
WIN+TAB 程序预览图定制:
原理是利用
ITaskbarList3可以注册
RegisterTab组成
tabgroup的方式,并且调整
SetTabOrder调整顺序。 win+tab会获取系统已显示的窗口预览图,任务栏显示的则是显示程序中设置。 具体的步骤是:
1. 创建一个窗口用于显示任务栏的缩略图和按钮自定义 hIconWindow,并且设置为隐藏
2. taskbar_list->RegisterTab(
hIconWindow
, hMainWindow); 注册为同一组(如果不隐藏的话,仍是显示两个任务栏图标)
3. taskbar_list->SetTabOrder(
hIconWindow,
hMainWindow
); 设置tab的顺序, 任务栏预览图是那组内第一个窗口的设置的预览图的, 如果顺序不调整的话,将会出现不可测的情况
4. 设置窗口任务栏缩略图是设置在
hIconWindow上
那么就完成了现在这种效果
可能的问题当窗口都隐藏是,再显示缩略图窗口的一些按钮会丢失,需要重新进行设置
后记:
实现以上方式,可能有多重途径,欢迎探讨或者指出错误 网易云免费体验馆,0成本体验20+款云产品! 更多网易研发、产品、运营经验分享请访问网易云社区 相关文章: 一个体验好的Windows 任务栏缩略图开发心得 标签:探讨 span 示例 好的 alt attr win10 back otto 原文地址:https://www.cnblogs.com/163yun/p/9711867.htmlHRESULT WINAPI DwmSetWindowAttribute(
HWND hwnd,
DWORD dwAttribute,
_In_ LPCVOID pvAttribute,
DWORD cbAttribute
);
BOOL switch= TRUE;
DwmSetWindowAttribute(hwnd, DWMWA_HAS_ICONIC_BITMAP,
&switch, sizeof(truth));
DwmSetWindowAttribute(hwnd, DWMWA_FORCE_ICONIC_REPRESENTATION,
&switch, sizeof(truth));
DWMWA_HAS_ICONIC_BITMAP表示窗口提供bitmap
DWMWA_FORCE_ICONIC_REPRESENTATION表示窗口强制使用bitmap展示缩略图。HRESULT WINAPI DwmSetIconicThumbnail(
_In_ HWND hwnd,
_In_ HBITMAP hbmp,
_In_ DWORD dwSITFlags
);
个人感觉比之前的好多了。
【推荐】 Android TV 开发(4)
【推荐】 反射型 DDoS 攻击的原理和防范措施
上一篇:c# 委托