Windows表徵圖:有一些你未必知道的東西

來源:互聯網
上載者:User
  有一天,我的程式在工作列的應用程式中看起來是這樣的             很奇怪,我的表徵圖明明不是這樣的,在資源管理員的檔案夾裡面,我的表徵圖能夠正常顯示,在案頭的工作列裡,也能正常的顯示,唯獨在工作管理員裡顯示不正常。雖然不是什麼大問題,但是如果是一個產品發布出去,會讓人覺得很不專業,會產生一定的負面影響。    這個表徵圖有點像是程式沒有表徵圖,使用的是系統預設的表徵圖,或者是程式無法響應的時候顯示的表徵圖。  應用程式圖示是個很重要的UI元素,在很多地方會顯示。這些位置大概可以分為兩類:    
 
  • 靜態顯示,就是程式沒有運行。比如資源管理員的檔案夾裡、案頭捷徑、開始菜單等。
  • 動態顯示,就是程式運行後。比如:案頭工作列、工作管理員、程式視窗標題列等。
靜態顯示,由於程式沒有運行,所以作業系統只能從檔案資訊中擷取應用程式的表徵圖。Windows程式有一個資源區,將資源以二進位的形式存放在檔案中,而且exe可執行檔是一個格式化的檔案,具有一定的格式,windows當然知道資源的位置,它從資源中找到表徵圖資源,並且顯示出來。這個功能可以使用SHGetFileInfo函數來實現。將任何一個其它檔案,比如txt檔案修改為exe副檔名,windows資源管理員也會嘗試去尋找表徵圖資源,當然是找不到啦,所以一般都會顯示系統預設的表徵圖,如顯示的表徵圖。所以很多dos程式,在windows裡都顯示預設的表徵圖。 動態顯示,程式已經運行,可以接受視窗訊息。而且案頭工作列、工作管理員這兩個地方,顯示的是頂層視窗。每個視窗可以顯示不同的表徵圖和標題,所以這兩個地方不可能是讀取檔案資訊來擷取表徵圖顯示。很顯然,標題可以通過GetWindowText跨進程來擷取。那麼視窗表徵圖呢?視窗表徵圖也可以有很多方式跨進程擷取。比如給視窗發送WM_GETICON,通過GetClassLong擷取視窗類別表徵圖。也就是說,案頭和工作管理員這兩個程式,可能是通過這些方式來擷取表徵圖進行顯示。 也就是說,靜態顯示,顯示的是應用程式圖示;動態顯示,顯示的是視窗的表徵圖。 我的程式在工作管理員裡顯示不正常,那應該是視窗的表徵圖顯示不正常。於是我嘗試工作管理員可能採用的擷取表徵圖方式,逐一檢查我的程式。WM_GETICON訊息一般都是預設處理,應該沒問題。GetClassLong是擷取視窗類別資訊,所以我檢查我的視窗註冊代碼,發現沒有設定視窗類別表徵圖。(由於採用了UI介面庫,裡面註冊了一些預設的視窗類別,都是沒有設定表徵圖的,這個UI庫,所有的UI都是自繪的,標題列也不是真正的windows標題列,是自己繪製的表徵圖和標題,所以視窗顯示表徵圖正常)。 將視窗類別表徵圖補上後,工作管理員裡顯示正常。 雖然是個小問題,但是如果思路不正確,哪怕是有多年開發經驗的老手,也可能會花費比較久的時間才能解決。尤其是現在大量使用各種庫,各種架構,很多新人連註冊視窗類別都不知道。。。。 其實Windows表徵圖還是很值得花點時間去全面瞭解一下,有一些關於Windows表徵圖的技術實現還是比較有趣: 1、捷徑是如何?的? 2、表徵圖上的數字是如何?的?有些程式會在傳統型應用程式表徵圖上顯示一個數字,比如軟體管理程式,會以這種方式告訴你有幾款軟體有更新,使用者體驗非常好。 3、svn是如何在改變表徵圖的?svn會改變檔案夾,檔案的表徵圖,就是在原有表徵圖上添加一些資訊,比如更改後的、簽出的。。 4、QQ推出的新功能,將經常聊天的人的頭像弄到案頭上,點擊就可以啟動QQ進行聊天。
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.