August 02, 2005

快速更換 Win32 的元件變成 XP Style

雖然我是個 Linux 愛用者,不過平常上班的時候還是用 MS-Windows XP,因為某些專業的軟體一定要在上面跑,可能也是因為這些緣故,我對 XP 的視覺呈現不是特別在意,只知道每次 simulation 的速度實在慢到不可思議,只好在一旁的 Linux box 上面作 coding,沒想到都寫出好幾個 test cases 了,回頭看 XP 的畫面,還是僵在那邊 (!)。

我一直有個疑惑,有些應用程式,比方說 [TightVNC],在 Windows XP 下的視覺呈現總是有點不一致,而剛剛閱讀 [Gary's Note] 的這篇 [讓你的AP上的元件變成XP的Style] 後,才發現這個有趣的技巧,趕緊套用。

咱們先看看原本的 TightVNC Viewer:

而經過這樣的處理後 (就是放一個 vncviewer.exe.manifest 檔,很簡單) 的畫面:

後者的 window control 已經變成 XP Style,真有趣 :-)
由 jserv 發表於 August 2, 2005 04:44 PM
迴響

我是覺得這種技巧很髒,這根本是 Windows 設計不良所謂 dll 地獄的遺毒。
因為系統的 common control dll 經常被各種安裝的軟體亂覆蓋
不同版本之間又有許多不相容,因此造成軟體間大量的衝突
某些軟體使用新版的 common control,某些使用舊版,
新舊版不全相容,而他們的檔名和安裝路徑都完全一樣,真要命!
結果造成後來一些 GUI library (例如 MFC) 內部花不少程式碼
在檢查現在使用的到底是哪一版的 common control,來避免這些不相容
不但要避免不相容,還要針對有已知bug的特定版本用一些"撇步"避免問題
為了稍微改善這個可怕的狀況,M$ 想出利用 Assembly (非指組語),來讓不同版本的同一 dll 共存,
應用程式利用 manifest 來指定,可要求使用特定版本的 common control dll
xp-style 支援包含在 common control 6.0,所以必須透過 manifest 來指定載入 6.0 版的 commctl32.dll,
而不載入預設的舊版 5.0,就會有新式的外觀。 這不是什麼神奇的技巧,
只是載入了另一個 dll 而已
BTW, manifest 除了可用同名的 .manifest 檔案外加,
也可以用 resource 的形式加入到 exe 檔 (resource type 24)

PCMan 發表於 August 2, 2005 11:09 PM