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

上一篇我们对任务栏进度条的开发有了相应的了解,本篇将对缩略图预览功能进行研究 。提起缩略图预览相信使用过Windows 7 的朋友一定不会陌生,它可以说是Windows 7 的一大亮点 。不论运行的程序是否处于活动状态,只要将鼠标放在任务栏图标上便会出现当前程序的预览效果 。如下图所示我们可以快速的在IE 缩略图中找到想看的网页 。当然在Windows API 中也提供了许多开发缩略图的工具,下面我们来看看如何使用它们 。
TabbedThumbnail.TabbedThumbnail 方法
在默认情况下Windows 7 会显示应用程序界面(如下图),如果想替换或增加新的缩略图,首先应通过TabbedThumbnail 类的TabbedThumbnail 方法创建一个新的缩略图(Thumbnail) 。
在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 方法

推荐阅读