騰訊新產(chǎn)品線:QQ2009, QQ 旋風(fēng)2,QQ影音等都使用了非常漂亮的界面。一直以為是自己寫的,畢竟QQ2009需要一個(gè)安全的環(huán)境以避免外掛的衍生。經(jīng)過(guò)spy++探測(cè),發(fā)現(xiàn)一個(gè)TXGuiFoundation,再在網(wǎng)上一搜,搜到了這個(gè)東西:
Dskinlite 是一款輕量級(jí)的C++皮膚庫(kù),使用XML文件根據(jù)規(guī)則來(lái)管理GDI資源如顏色,字體,圖片,并描述界面構(gòu)成,最大程度的將界面和程序邏輯分離,同時(shí)為軟件皮膚更換,換色等提供基礎(chǔ)支持。DSkinLite將界面構(gòu)成元素抽象為線條元素,矩形元素,圖片元素,文本元素,并提供相應(yīng)規(guī)則來(lái)使用這些元素"組合"界面。DSkinlite開(kāi)發(fā)團(tuán)隊(duì)有較深的Windows界面開(kāi)發(fā)的實(shí)際經(jīng)歷,對(duì)軟件界面處理頗有心得,致力于將實(shí)用,高效,前沿的界面處理技術(shù)介紹給廣大開(kāi)發(fā)人員。
DSkinLite與其他界面庫(kù)相比有以下特點(diǎn):
沒(méi)有采用Hook所有進(jìn)程消息的方式,因此沒(méi)有替換系統(tǒng)相關(guān)對(duì)話框。DSkinLite只是采用MFC,ATL等framework類似的方式,簡(jiǎn)單替換窗口過(guò)程,截取界面繪制等消息,對(duì)應(yīng)用程序來(lái)說(shuō)基本上是透明的。從這個(gè)方面講,DSkinLite是一款輕量級(jí)的界面庫(kù)。
同時(shí),DSkinLite沒(méi)有特別的Frameword的依賴,可以在Win32,MFC,ATL,WTL等環(huán)境中使用。 DSkinLite界面庫(kù)使用XML管理GDI資源并配置窗口界面,用戶可以方便的保持界面的一致性,同時(shí)可以很方便的構(gòu)造出更多的窗口樣式
界面庫(kù)的高效性。DSkinLite將專注于程序庫(kù)的高效性,具體表現(xiàn)在內(nèi)存占用,界面繪制速度,界面防止閃爍,程序加載圖片資源、解析XML文件的速度等方面,我們做了很多工作,并不斷持續(xù)優(yōu)化。以期望程序各方面表現(xiàn)最為高效的界面程序庫(kù)。
DSkinLite 皮膚庫(kù)的程序架構(gòu)考慮到可能出現(xiàn)的界面特效,使得實(shí)現(xiàn)諸如透明,漸隱漸顯,動(dòng)畫(huà)等界面特效變得更加容易,目前支持大多數(shù)控件的透明效果,后續(xù)會(huì)根據(jù)用戶需求,開(kāi)發(fā)更多的實(shí)用的界面特效。
使用XML配置控件的界面
- 使用XML定義GDI資源(顏色,字體,圖片,cursor)
- 使用XML配置控件的界面風(fēng)格
- 繪制元素被抽象為線條,文本,矩形,圖片
XML語(yǔ)法簡(jiǎn)單,易于學(xué)習(xí)和掌握
其他關(guān)鍵特性
- 基于Win32 API,沒(méi)有framework依賴。
- 支持大多數(shù)標(biāo)準(zhǔn)控件
- 支持改變皮膚色調(diào)
- 支持大多數(shù)控件透明,包括子窗口透明
- 支持動(dòng)畫(huà)效果
- 支持png, bitmap, gif, ico圖片格式。支持帶透明通道的png圖片
- 支持將皮膚文件打包到一個(gè)文件
- 支持Unicode
- 支持Popup Menu等,包括不規(guī)則的menu window
支持滾動(dòng)條控件,同時(shí)支持所有內(nèi)置滾動(dòng)條控制
該網(wǎng)站還提到一個(gè)DirectUI的東西,這個(gè)東西是一種windowless的架構(gòu),具體概念類似于游戲中的UI,不依賴平臺(tái)句柄,因此外掛只能截取諸如QQ基于ATL的外窗口,但是無(wú)法獲取窗口內(nèi)部的數(shù)據(jù)