生活随笔
收集整理的這篇文章主要介紹了
Windows图标:有一些你未必知道的东西
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
有一天,我的程序在任務(wù)欄的應(yīng)用程序中看起來是這樣的
很奇怪,我的圖標(biāo)明明不是這樣的,在資源管理器的文件夾里面,我的圖標(biāo)能夠正常顯示,在桌面的任務(wù)欄里,也能正常的顯示,唯獨在任務(wù)管理器里顯示不正常。雖然不是什么大問題,但是如果是一個產(chǎn)品發(fā)布出去,會讓人覺得很不專業(yè),會產(chǎn)生一定的負(fù)面影響。 這個圖標(biāo)有點像是程序沒有圖標(biāo),使用的是系統(tǒng)缺省的圖標(biāo),或者是程序無法響應(yīng)的時候顯示的圖標(biāo)。 應(yīng)用程序圖標(biāo)是個很重要的UI元素,在很多地方會顯示。這些位置大概可以分為兩類:
- 靜態(tài)顯示,就是程序沒有運行。比如資源管理器的文件夾里、桌面快捷方式、開始菜單等。
- 動態(tài)顯示,就是程序運行后。比如:桌面任務(wù)欄、任務(wù)管理器、程序窗口標(biāo)題欄等。
靜態(tài)顯示,由于程序沒有運行,所以操作系統(tǒng)只能從文件信息中獲取應(yīng)用程序的圖標(biāo)。Windows程序有一個資源區(qū),將資源以二進(jìn)制的形式存放在文件中,而且exe可執(zhí)行文件是一個格式化的文件,具有一定的格式,windows當(dāng)然知道資源的位置,它從資源中找到圖標(biāo)資源,并且顯示出來。這個功能可以使用SHGetFileInfo函數(shù)來實現(xiàn)。將任何一個其它文件,比如txt文件修改為exe擴(kuò)展名,windows資源管理器也會嘗試去查找圖標(biāo)資源,當(dāng)然是找不到啦,所以一般都會顯示系統(tǒng)缺省的圖標(biāo),如上圖顯示的圖標(biāo)。所以很多dos程序,在windows里都顯示缺省的圖標(biāo)。 動態(tài)顯示,程序已經(jīng)運行,可以接受窗口消息。而且桌面任務(wù)欄、任務(wù)管理器這兩個地方,顯示的是頂層窗口。每個窗口可以顯示不同的圖標(biāo)和標(biāo)題,所以這兩個地方不可能是讀取文件信息來獲取圖標(biāo)顯示。很顯然,標(biāo)題可以通過GetWindowText跨進(jìn)程來獲取。那么窗口圖標(biāo)呢?窗口圖標(biāo)也可以有很多方式跨進(jìn)程獲取。比如給窗口發(fā)送WM_GETICON,通過GetClassLong獲取窗口類圖標(biāo)。也就是說,桌面和任務(wù)管理器這兩個程序,可能是通過這些方式來獲取圖標(biāo)進(jìn)行顯示。 也就是說,靜態(tài)顯示,顯示的是應(yīng)用程序圖標(biāo);動態(tài)顯示,顯示的是窗口的圖標(biāo)。 我的程序在任務(wù)管理器里顯示不正常,那應(yīng)該是窗口的圖標(biāo)顯示不正常。于是我嘗試任務(wù)管理器可能采用的獲取圖標(biāo)方式,逐一檢查我的程序。WM_GETICON消息一般都是缺省處理,應(yīng)該沒問題。GetClassLong是獲取窗口類信息,所以我檢查我的窗口注冊代碼,發(fā)現(xiàn)沒有設(shè)置窗口類圖標(biāo)。(由于采用了UI界面庫,里面注冊了一些缺省的窗口類,都是沒有設(shè)置圖標(biāo)的,這個UI庫,所有的UI都是自繪的,標(biāo)題欄也不是真正的windows標(biāo)題欄,是自己繪制的圖標(biāo)和標(biāo)題,所以窗口顯示圖標(biāo)正常)。 將窗口類圖標(biāo)補(bǔ)上后,任務(wù)管理器里顯示正常。 雖然是個小問題,但是如果思路不正確,哪怕是有多年開發(fā)經(jīng)驗的老手,也可能會花費比較久的時間才能解決。尤其是現(xiàn)在大量使用各種庫,各種框架,很多新人連注冊窗口類都不知道。。。。 其實Windows圖標(biāo)還是很值得花點時間去全面了解一下,有一些關(guān)于Windows圖標(biāo)的技術(shù)實現(xiàn)還是比較有趣: 1、快捷方式是如何實現(xiàn)的? 2、圖標(biāo)上的數(shù)字是如何實現(xiàn)的?有些程序會在桌面應(yīng)用程序圖標(biāo)上顯示一個數(shù)字,比如軟件管理程序,會以這種方式告訴你有幾款軟件有更新,用戶體驗非常好。 3、svn是如何在改變圖標(biāo)的?svn會改變文件夾,文件的圖標(biāo),就是在原有圖標(biāo)上添加一些信息,比如更改后的、簽出的。。 4、QQ推出的新功能,將經(jīng)常聊天的人的頭像弄到桌面上,點擊就可以啟動QQ進(jìn)行聊天。
轉(zhuǎn)載于:https://www.cnblogs.com/snake-hand/archive/2012/08/22/2650988.html
總結(jié)
以上是生活随笔為你收集整理的Windows图标:有一些你未必知道的东西的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。