av一区二区在线观看_亚洲男人的天堂网站_日韩亚洲视频_在线成人免费_欧美日韩精品免费观看视频_久草视

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

Windows 7 任務(wù)欄開(kāi)發(fā)之覆蓋圖標(biāo)(Overlay Icon)

瀏覽:3日期:2023-05-31 15:23:35

當(dāng)?shù)谝淮问褂肳indows 7 時(shí),任務(wù)欄(Taskbar)的改變可以說(shuō)讓我眼前一亮。在以前版本W(wǎng)indows 桌面功能的基礎(chǔ)上,Windows 7 任務(wù)欄為我們?cè)鎏砹嗽S多其他功能:Jump Lists,Window PrevIEw,Process Bar,Overlay Icon 等等。

新任務(wù)欄的功能使我們的操作更加方便快捷,在參加北京.Net俱樂(lè)部舉辦的“Windows 7 發(fā)布活動(dòng)時(shí)初步了解到有關(guān)應(yīng)用程序支持Windows 7 任務(wù)欄特性方面的內(nèi)容。那么作為一名開(kāi)發(fā)人員我們的應(yīng)用程序能否實(shí)現(xiàn)這些功能呢?答案當(dāng)然是“可以,微軟提供了方便的工具Windows API Code Pack for .NET Framework 來(lái)幫助我們完成這些開(kāi)發(fā)。

本篇主要演示Overlay Icon(MSDN上直譯為“覆蓋圖標(biāo))的功能,從字面上來(lái)看也許不太明白這是什么意思,在Windows 7 中UAC 功能為系統(tǒng)增加了安全性,當(dāng)UAC 啟動(dòng)時(shí)有些應(yīng)用程序的圖標(biāo)上方會(huì)顯示一個(gè)盾牌標(biāo)志(如下圖),沒(méi)錯(cuò)這個(gè)就是Overlay Icon 功能,下面就來(lái)看看它是如何實(shí)現(xiàn)的。

準(zhǔn)備工作

1. 添加一些Overlay Icon 圖片(.ico)到項(xiàng)目Resources 中。

2. 下載Windows API Code Pack,增加Microsoft.WindowsAPICodePack.dll 和Microsoft.WindowsAPICodePack.Shell.dll。

3. 引用Microsoft.WindowsAPICodePack.Taskbar 命名空間。

TaskbarManager.SetOverlayIcon(Icon, String) 方法

TaskbarManager 類提供了一些常用的任務(wù)欄特性設(shè)置方法,其中SetOverlayIcon 方法有三種不同的方式來(lái)設(shè)置Overlay Icon:

//用于應(yīng)用程序主窗口 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); }

在程序中通過(guò)TaskbarManager.Instance.SetOverlayIcon() 即可實(shí)現(xiàn)Overlay Icon 效果:

Icon icon = iconList.SelectedItem as Icon; TaskbarManager.Instance.SetOverlayIcon(icon, 'Overlay Icon Demo');

如果將Icon 和 String 都設(shè)為Null 則取消Overlay Icon 效果:

TaskbarManager.Instance.SetOverlayIcon(null, null);

單窗口示例

程序運(yùn)行后的狀態(tài):

在圖標(biāo)列表中選擇Overlay Icon 后的不同效果:

多窗口示例

在默認(rèn)情況下,如果從父窗口中調(diào)出子窗口,其任務(wù)欄圖標(biāo)是組合疊加在一起的(如下圖):

如果想為不同的窗口中實(shí)現(xiàn)Overlay Icon 則首先需要通過(guò)修改TestWindow 的Application ID (AppID)將兩個(gè)窗口的任務(wù)欄圖標(biāo)分離開(kāi)。每個(gè)運(yùn)行的窗口都會(huì)有各自的AppID,用來(lái)決定任務(wù)欄圖標(biāo)屬于哪個(gè)窗口。這也就是為什么當(dāng)我們打開(kāi)多個(gè) Word 文檔或IE 標(biāo)簽后任務(wù)欄圖標(biāo)都是自動(dòng)疊加在一起的,所以我們可以通過(guò)修改窗口的AppID 使任務(wù)欄圖標(biāo)分開(kāi)顯示。

通過(guò)使用TaskbarManager.SetApplicationIdForSpecificWindow(IntPtr windowHandle,String appID) 方法可以修改窗口的AppID。但是目前下載的Windows API 1.0.1 版本有些小問(wèn)題,使得SetApplicationIdForSpecificWindow 方法根本不起作用。根源就在TaskbarNativeMethods.cs 的SetWindowProperty 方法,沒(méi)有對(duì)pv 進(jìn)行任何賦值操作,導(dǎo)致propStore 根本沒(méi)有值,所以在該方法中增加pv.SetString(value),重新編譯并替換掉原來(lái)的 Microsoft.WindowsAPICodePack.Shell.dll 即可:

internal static void SetWindowProperty(IntPtr hwnd, PropertyKey propkey, string value) { // Get the IPropertyStore for the given window handle IPropertyStore propStore = GetWindowPropertyStore(hwnd);  // Set the value PropVariant pv = new PropVariant(); pv.SetString(value); propStore.SetValue(ref propkey, ref pv);  // Dispose the IPropertyStore and PropVariant Marshal.ReleaseComObject(propStore); pv.Clear(); }

程序改好后,就可以使用SetApplicationIdForSpecificWindow(IntPtr, String) 干活了:

Window newWindow = new TestWindow(); newWindow.Show(); WindowInteropHelper helper = new WindowInteropHelper(newWindow); IntPtr ptr = helper.Handle;TaskbarManager.Instance.SetApplicationIdForSpecificWindow(ptr, 'AppID');

修改了TestWindow 的AppID,兩個(gè)窗口的任務(wù)欄圖標(biāo)才真正的完成了分離:

通過(guò)SetOverlayIcon(IntPtr, Icon, String) 來(lái)設(shè)置指定窗口(TestWindow)的Overlay Icon:

TaskbarManager.Instance.SetOverlayIcon(ptr, icon, 'Overlay Icon Demo');

分離后再來(lái)看看效果,只顯示MainWindow 圖標(biāo):

兩個(gè)窗口的圖標(biāo)都顯示:

出處:http://www.cnblogs.com/gnIElee/

標(biāo)簽: Windows系統(tǒng)
相關(guān)文章:
主站蜘蛛池模板: 中文字幕乱码一区二区三区 | 亚洲高清在线视频 | 久久激情av| 亚洲一区在线播放 | 天天躁日日躁性色aⅴ电影 免费在线观看成年人视频 国产欧美精品 | 久久久国产精品 | 欧美亚洲国产日韩 | 久久久久亚洲 | 色本道| 欧美美女爱爱 | 中文字幕精品一区二区三区精品 | 免费观看的黄色网址 | 91视频国产精品 | 国产一区二区视频在线 | 久久精品欧美一区二区三区麻豆 | 国产免费一区二区 | 精品国产乱码久久久久久蜜柚 | 亚洲国产精品成人久久久 | 成人av免费 | 夜夜爽99久久国产综合精品女不卡 | 日韩福利 | 欧美激情一区二区三区 | 一本一道久久a久久精品综合蜜臀 | 韩日精品一区 | 久久精品国产亚洲 | 中文字幕av中文字幕 | 欧美一a一片一级一片 | 亚洲成人精品 | 天天干.com | 欧洲一区在线观看 | 99精品欧美一区二区三区综合在线 | 国产成人午夜精品影院游乐网 | 日日摸日日碰夜夜爽亚洲精品蜜乳 | 免费观看国产视频在线 | 日本免费一区二区三区四区 | 欧美综合一区二区 | 一级黄色片免费 | 一区二区三区日韩 | 亚洲高清视频一区 | 草草影院ccyy| 欧美成年黄网站色视频 |