介面換膚技術

2021-06-19 16:23:24 字數 1330 閱讀 2629

換膚技術原理

說到換膚就要提到介面庫,介面庫一般來說分2種,一種是基於傳統視窗控制代碼控制項的, 還有一種是基於directui的。

當然比較早的專業介面庫都是基於傳統視窗控制代碼控制項的,而這種介面庫實現換膚的方式一般是基於hook,大概原理是:

(1)安裝視窗過程hook(如wh_cbt hook

),準備截獲應用程式所有視窗的建立事件

(2) 收到視窗建立等訊息,根據類名、風格等一些條件來判斷是否對該視窗控制項進行subclass

(3)如果需要則安裝相應控制項型別的subclass,視窗subclass後即可以收到該視窗所有的訊息

(4)根據不同的訊息進行相應的處理, 根據**型別進行相應的繪畫

(5)視窗銷毀是進行unsubclass

用上面這種hook的方式可以攔截所有系統控制項的訊息,介面庫可以根據當前的**型別進行相應的繪畫和處理。

對於使用者來說往往非常簡單,我們只要在程式中直接使用系統的標準控制項,然後通常只需在程式初始化時呼叫介面庫的乙個初始化函式即可實現完整的換膚。

當然要所有換膚的工作量都移到了介面庫里,介面庫要根據**型別實現所有控制項的繪畫處理,而且windows系統的各個版本又各有差異,所以介面庫往往會非常複雜。這種方式的優點是使用簡單,並且程式的開發語言也沒有限制;缺點是介面庫複雜性帶來的不穩定性。

還有一種對視窗控制項實現換膚的方式是使用者根據需要,自己subclass某些控制項,自己根據**風格,自己貼圖處理,

這種方式被大部分不依賴第三方專業介面庫的程式所採用。我前面的截圖小工具就屬於這種方式,它的優點是靈活穩定,自己好控制;缺點是開發人員需要一些控制項知識和繪畫技能,並且也不能跨語言共用。

另外,關於換膚本身,又分不同型別。有的換膚只是簡單的改變一下背景(顏色), 也有的換膚是改變整個視窗的大小和region(異形視窗), 還有的換膚還改變了控制項的位置,這取決於**的型別設定了哪些東西要變化,變得越多實現越複雜。

最新的介面庫一般採用的是directui技術,即按照遊戲介面的思想,所有的控制項全都畫在乙個視窗上模擬出來,這種方式的優點是透明度和動畫等全都可以自己控制,從而可以實現很炫的介面效果,當然換膚對它來說更是小菜一碟。

我們基本上可以從qq介面的演變來驗證這一趨勢,從最早的單一風格視窗,到後來的換膚和異形視窗,再到現在的directui。當然qq採用directui技術除了實現介面炫方面考慮,應該還有安全方面的考慮。

總的來說directui是趨勢,而微軟的wpf代表了directui最先進的技術方向,換膚對於directui來說非常容易。隨著win7,win8 的普及,傳統介面庫的市場會越來越小,一來因為系統本身已經很炫了,二來微軟自己的wpf和xaml技術基本上已經可以實現任何想要的效果。當然只要xp不消亡,傳統的介面庫還是有自己的一席之地。

Qt之介面換膚

首先,新建兩個 按需新增 字尾名為qss的檔案,例如 black.qss white.qss,將它們加入資源檔案 qrc 中。分別在 black.qss white.qss 檔案中編寫自己的樣式 例如 black.qss 提示 qtooltip white.qss 提示 qtooltip qss 請...

SkinLoad程式介面換膚工具

skinload程式介面換膚工具 版本更新skinload v0.3 說明 skinload是乙個給程式換膚的工具,通過幾個簡單的函式呼叫就可以給你的應用程式加上漂亮的 包括所有的系統對話方塊。通過skinloadmaker 編輯工具,可以自己定製 介面效果圖如下 如何在程式中實現換膚 一 靜態鏈結...

使用免費介面換膚軟體 USkin

使用免費介面換膚軟體 uskin 一 介紹 我們都知道,skin以前是一項比較難的技術。但至從windowsxp推出以來,skin或者說theme變得很普遍。雖然windowsxp可以支援theme,但當我們改變windowsxp的風格時,所有支援windowsxp風格的應用程式都變成一樣的風格,如...