设为首页 收藏本站
查看: 1064|回复: 0

Windows 7 任务栏开发 之 缩略图预览(Thumbnail)

[复制链接]

尚未签到

发表于 2015-5-8 14:12:15 | 显示全部楼层 |阅读模式
  上一篇我们对任务栏进度条的开发有了相应的了解,本篇将对缩略图预览功能进行研究。提起缩略图预览相信使用过Windows 7 的朋友一定不会陌生,它可以说是Windows 7 的一大亮点。不论运行的程序是否处于活动状态,只要将鼠标放在任务栏图标上便会出现当前程序的预览效果。如下图所示我们可以快速的在IE 缩略图中找到想看的网页。当然在Windows API 中也提供了许多开发缩略图的工具,下面我们来看看如何使用它们。
DSC0000.png
  
  TabbedThumbnail.TabbedThumbnail 方法
  在默认情况下Windows 7 会显示应用程序界面(如下图),如果想替换或增加新的缩略图,首先应通过TabbedThumbnail 类的TabbedThumbnail 方法创建一个新的缩略图(Thumbnail)。
DSC0001.png
  
  在TabbedThumbnail 类中,有三个TabbedThumbnail 方法可以创建缩略图:
  
//设定父窗口和子窗口/控件
public TabbedThumbnail(IntPtr parentWindowHandle, IntPtr windowHandle)
{
if (parentWindowHandle == IntPtr.Zero)
throw new ArgumentException("Parent window handle cannot be zero.",
                                    "parentWindowHandle");
if (windowHandle == IntPtr.Zero)
throw new ArgumentException("Child control's window handle cannot be zero.",
                                    "windowHandle");
WindowHandle = windowHandle;
ParentWindowHandle = parentWindowHandle;
}
//设定父窗口和子控件
public TabbedThumbnail(IntPtr parentWindowHandle, Control control)
{
if (parentWindowHandle == IntPtr.Zero)
throw new ArgumentException("Parent window handle cannot be zero.",
                                    "parentWindowHandle");
if (control == null)
throw new ArgumentNullException("control");
WindowHandle = control.Handle;
ParentWindowHandle = parentWindowHandle;
}
//设定父窗口或WPF子控件,以及两者的偏移量
public TabbedThumbnail(Window parentWindow, UIElement windowsControl,
                       Vector peekOffset)
{
if (windowsControl == null)
throw new ArgumentNullException("control");
if (parentWindow == null)
throw new ArgumentNullException("parentWindow");
WindowHandle = IntPtr.Zero;
WindowsControl = windowsControl;
WindowsControlParentWindow = parentWindow;
ParentWindowHandle = (new WindowInteropHelper(parentWindow)).Handle;
PeekOffset = peekOffset;
}
  

TabbedThumbnail.AddThumbnailPreview 方法
  通过AddThumbnailPreview 方法将TabbedThumbnail 添加到任务栏缩略图中:

public void AddThumbnailPreview(TabbedThumbnail preview){… …}
  

TabbedThumbnailManager.SetActiveTab 方法
  通过SetActiveTab 方法将指定的缩略图、窗口句柄、Form控件、WPF控件设置为活动状态。例如,在IE 中我们打开了多个网页标签,那么SetActiveTab 可以将其中一个标签设为当前浏览页。

public void SetActiveTab(TabbedThumbnail preview){… …}
public void SetActiveTab(IntPtr windowHandle){… …}
public void SetActiveTab(Control control){… …}
public void SetActiveTab(UIElement windowsControl){… …}
  

TabbedThumbnailManager.GetThumbnailPreview 方法
  通过GetThumbnailPreview 方法获取指定的窗口句柄、Form控件、WPF控件的缩略图(TabbedThumbnail):

public TabbedThumbnail GetThumbnailPreview(IntPtr windowHandle){… …}
public TabbedThumbnail GetThumbnailPreview(Control control){… …}
public TabbedThumbnail GetThumbnailPreview(UIElement windowsControl){… …}
  

TabbedThumbnailManager.RemoveThumbnailPreview 方法
  通过RemoveThumbnailPreview 方法将指定的缩略图、窗口句柄、Form控件、WPF控件从任务栏缩略图中删除:

public void RemoveThumbnailPreview(TabbedThumbnail preview){… …}
public void RemoveThumbnailPreview(IntPtr windowHandle){… …}
public void RemoveThumbnailPreview(Control control){… …}
public void RemoveThumbnailPreview(UIElement windowsControl){… …}
  

TabbedThumbnailManager.IsThumbnailPreviewAdded 方法
  通过IsThumbnailPreviewAdded 方法判断的缩略图、窗口句柄、Form控件、WPF控件是否已添加,并返回Bool 值:

public bool IsThumbnailPreviewAdded(TabbedThumbnail preview){… …}
public bool IsThumbnailPreviewAdded(IntPtr windowHandle){… …}
public bool IsThumbnailPreviewAdded(Control control){… …}
public bool IsThumbnailPreviewAdded(UIElement control){… …}
  

TabbedThumbnailManager.SetTabOrder 方法
  通过SetTabOrder 方法调换两个TabbedThumbnail 前后位置,注意第一个TabbedThumbnail 将调换到第二个TabbedThumbnail 的前面。

public void SetTabOrder(TabbedThumbnail previewToChange,
                        TabbedThumbnail insertBeforePreview){… …}
  

效果演示
  通过以上方法就能够随心所欲的设定缩略图了,下面就将上面示意图中的缩略图改为Windows Logo 图标,其中ui 即为XAML 代码中控件的名称(x:Name):

TabbedThumbnail newPreview = new TabbedThumbnail(Application.Current.MainWindow, ui, peekOffect);
TaskbarManager.Instance.TabbedThumbnail.AddThumbnailPreview(newPreview);
TaskbarManager.Instance.TabbedThumbnail.SetActiveTab(newPreview);
  
DSC0002.png
  
  点击“Set this image as thumbnail” 前后对比,缩略图变为了 控件:
DSC0003.png 修改前    DSC0004.png   修改后
  
  
  点击“Add another thumbnail” 后,可将 控件加入缩略图中:
DSC0005.png
  
  点击 “Change thumbnail order” 调换缩略图前后位置:
DSC0006.png
  
  另外,还可以通过TabbedThumbnail.Tooltip 属性为缩略图添加提示信息。当鼠标置于缩略图上方时,将会有相应的ToolTip 显示:

newPreview.Tooltip = "Welcome to Windows 7";
  
DSC0007.png        DSC0008.png
  

相关参考资料
  1. Windows API Code Pack for .NET Framework
http://code.msdn.microsoft.com/WindowsAPICodePack
  2. Thumbnail Toolbars
http://msdn.microsoft.com/en-us/library/dd378460(VS.85).aspx#thumbbars

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-65027-1-1.html 上篇帖子: Windows Phone 7 不温不火学习之《画图》 下篇帖子: [博客园上海俱乐部活动通知]Windows 7社区发布(2009-10-24)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表