日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

Overlay Icon Windows 7 任務欄開發(fā)之覆蓋圖標

當?shù)谝淮问褂肳indows 7 時,任務欄(Taskbar)的改變可以說讓我眼前一亮 。在以前版本W(wǎng)indows 桌面功能的基礎上,Windows 7 任務欄為我們增添了許多其他功能:Jump Lists,Window PrevIEw,Process Bar,Overlay Icon 等等 。
新任務欄的功能使我們的操作更加方便快捷,在參加北京.Net俱樂部舉辦的“Windows 7 發(fā)布活動時初步了解到有關應用程序支持Windows 7 任務欄特性方面的內(nèi)容 。那么作為一名開發(fā)人員我們的應用程序能否實現(xiàn)這些功能呢?答案當然是“可以,微軟提供了方便的工具Windows API Code Pack for .NET Framework 來幫助我們完成這些開發(fā) 。
本篇主要演示Overlay Icon(MSDN上直譯為“覆蓋圖標)的功能,從字面上來看也許不太明白這是什么意思,在Windows 7 中UAC 功能為系統(tǒng)增加了安全性,當UAC 啟動時有些應用程序的圖標上方會顯示一個盾牌標志(如下圖),沒錯這個就是Overlay Icon 功能,下面就來看看它是如何實現(xiàn)的 。
準備工作
1. 添加一些Overlay Icon 圖片(.ico)到項目Resources 中 。
2. 下載Windows API Code Pack,增加Microsoft.WindowsAPICodePack.dll 和Microsoft.WindowsAPICodePack.Shell.dll 。
3. 引用Microsoft.WindowsAPICodePack.Taskbar 命名空間 。
TaskbarManager.SetOverlayIcon(Icon, String) 方法
TaskbarManager 類提供了一些常用的任務欄特性設置方法,其中SetOverlayIcon 方法有三種不同的方式來設置Overlay Icon:
//用于應用程序主窗口 
public void SetOverlayIcon(System.Drawing.Icon icon, string accessibilityText) 
{ 
CoreHelpers.ThrowIfNotWin7(); 
TaskbarList.SetOverlayIcon(OwnerHandle, 
icon != null ? icon.Handle : IntPtr.Zero, accessibilityText); 
} 
 
//用于指定窗口 
public void SetOverlayIcon(IntPtr windowHandle, System.Drawing.Icon icon, 
string accessibilityText) 
{ 
CoreHelpers.ThrowIfNotWin7(); 
TaskbarList.SetOverlayIcon(windowHandle, 
icon != null ? icon.Handle : IntPtr.Zero, accessibilityText); 
} 
 
//用于指定的WPF窗口 
public void SetOverlayIcon(System.Windows.Window window, 
System.Drawing.Icon icon, string accessibilityText) 
{ 
CoreHelpers.ThrowIfNotWin7(); 
TaskbarList.SetOverlayIcon( 
(new WindowInteropHelper(window)).Handle, 
icon != null ? icon.Handle : IntPtr.Zero, 
accessibilityText); 
}
在程序中通過TaskbarManager.Instance.SetOverlayIcon() 即可實現(xiàn)Overlay Icon 效果:
Icon icon = iconList.SelectedItem as Icon; 
TaskbarManager.Instance.SetOverlayIcon(icon, "Overlay Icon Demo");
如果將Icon 和 String 都設為Null 則取消Overlay Icon 效果:
TaskbarManager.Instance.SetOverlayIcon(null, null);
單窗口示例
程序運行后的狀態(tài):
在圖標列表中選擇Overlay Icon 后的不同效果:
多窗口示例
在默認情況下,如果從父窗口中調(diào)出子窗口,其任務欄圖標是組合疊加在一起的(如下圖):
如果想為不同的窗口中實現(xiàn)Overlay Icon 則首先需要通過修改TestWindow 的Application ID (AppID)將兩個窗口的任務欄圖標分離開 。每個運行的窗口都會有各自的AppID,用來決定任務欄圖標屬于哪個窗口 。這也就是為什么當我們打開多個 Word 文檔或IE 標簽后任務欄圖標都是自動疊加在一起的,所以我們可以通過修改窗口的AppID 使任務欄圖標分開顯示 。
通過使用TaskbarManager.SetApplicationIdForSpecificWindow(IntPtr windowHandle,String appID) 方法可以修改窗口的AppID 。但是目前下載的Windows API 1.0.1 版本有些小問題,使得SetApplicationIdForSpecificWindow 方法根本不起作用 。根源就在TaskbarNativeMethods.cs 的SetWindowProperty 方法,沒有對pv 進行任何賦值操作,導致propStore 根本沒有值,所以在該方法中增加pv.SetString(value),重新編譯并替換掉原來的 Microsoft.WindowsAPICodePack.Shell.dll 即可:

推薦閱讀