上一篇我們對工作列進度條的開發有了相應的瞭解,本篇將對縮圖預覽功能進行研究。提起縮圖預覽相信使用過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 方法
通過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);
點擊“Set this image as thumbnail” 前後對比,縮圖變為了<Image> 控制項:
修改前 修改後
點擊“Add another thumbnail” 後,可將<Button> 控制項加入縮圖中:
點擊 “Change thumbnail order” 調換縮圖前後位置:
另外,還可以通過TabbedThumbnail.Tooltip 屬性為縮圖添加提示資訊。當滑鼠置於縮圖上方時,將會有相應的ToolTip 顯示:
newPreview.Tooltip = "Welcome to Windows 7";
相關參考資料
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