前幾天在vckbase上面看到這麼一篇文章
現在模仿一下來實現一下這個功能
[quote]
隨著計算機技術的發展與普及,計算機逐漸走進了人們的日常生活當中。人們通過它來學習,娛樂,信息的交互等等.並且對應需而生的各種各樣的軟件產品的要求也有了一定的提高。除了基本功能外,對軟件易操作性,界面的美觀性等也是一個成功軟件必不可少的重要因素。美觀個性化的界面是一個軟件吸引和留住用戶的法寶之一,通訊軟件QQ/MSN就是這類產品中的一個典型的代表,下面將用VC++對QQ的界面進行模擬實現,供廣大朋友參考。
相信各位對QQ已經相當熟悉,因此對其外觀特性等不作累敘.我們將選用Visual C++來進行進行實現。在這之前,有必要向讀者介紹一下大體情況。
其實,整個過程最重要的部分是個性化界面自繪部分,也是難度最大的部分。關於界面編程方面的知識,誠然這是一個較為大的體系結構,我們不能奢求通過簡短的篇幅就能對它進行較為全面的描述,並且現在軟件開發行業也有縮短開發周期,提高開發效率的趨勢,於是將這一難度問題借用外在控件協助我們完成。
關於換膚控件的選擇,這裡也向大家簡單介紹一下,當然這只是個人的觀點,僅供參考了解。當前市場提供多個換膚出名的換膚產品(SkinMagic,Skin++,USkin,AppFace,SkinCrafte,等),其中SkinMagic,AppFace,USkin等都是做得比較馬虎的,界面的某些元素效果做得讓人不太滿意.而Skin++和SkinCrafte在這方面做得比較出色.客觀的說Skin++目前應該說,是國內較為出色的產品,其占用資源消耗比俄國產品SkinCrafte要出色,而俄國產品SkinCrafte在外觀性能上做到的效果比Skin++要優秀點,COOL一點。
雖然如此,本實現沒有選用以上任何一產品,原因是這裡有一個新起之秀SkinBeauty,它無論是性能和外觀做出的效果都比較囂張,更甚的是宣稱提供良好的鍵盤操作支持同時並號稱在Win2K和XP等系統可以做出Vista的玻璃磨沙效果。
當然,這些都是所謂的比較結果而已,還有一個選用SkinBeauty的原因是:SkinBeauty可以使用自帶的皮膚編輯軟件SkinBeauty Studio)實現一套皮膚包含多種樣式的窗口界面,按鈕樣式等。這是以上任何一個產品暫時似乎都不能提供的。而我們這個項目的需求也有此(主界面,聊天對話框窗口不同,並有多個不同特性的按鈕等細節問題)。[/quote]
0.准備工作:
用產品相應的皮膚編輯軟件SkinBeautyStudio編輯好界面各元素皮膚,一般好看的界面都是由圖片繪制所成這裡是到其主站下載已有的BeautyQQ.bsk皮膚)。將下載好的換膚開發庫SkinBeauty.dll,SkinBeauty.lib)和接口文件SkinBeautyExport.h准備好,下載地址在本文章後有給出,或自己到[url]www.afe-soft.com[/url]上自己下載。
2.加載換膚庫
做好基本框架後,界面還是很土,運行效果難以讓人滿意,於是我們接下來可以加載換膚庫,初步改變程序的界面外觀了。
將先前准備好的skinBeauty.dll庫放在項目的運行目錄,在項目的目錄放入SkinBeautyExport.h文件和SkinBeauty.lib文件,以便稍後引入並調用函數接口。一般DLL庫的調用分成靜態調用和程序運行期間動態調用2種,關於這兩種的區別,可參考其他文章。這裡,我們將選用靜態調用的方式實現)
在適當的位置添加引入庫的聲明,這裡我們選擇在stdafx.h文件裡面添加:
//inside stdafx.h //SkinBeauty Lib Call #include "SkinBeautyExport.h" #pragma comment(lib,"SkinBeauty.lib")在項目得初始化位置(這裡選擇在項目的創建實例cpp文件裡面,BeautyQQ.cpp的CBeautyQQApp::InitInstance()函數的開始,一般都可以在此加載)加入皮膚加載的代碼:
BOOL CBeautyQQApp::InitInstance() { CString exeFullPath; CString strFilename; int nLen = GetModuleFileName(NULL, exeFullPath,MAX_PATH); CString strPath(exeFullPath); strPath = strPath.Left(strPath.ReverseFind('\\')); strFilename = strPath +_T("\\beautyQQ.bsk"); SkinLoad(THCAR2char(strFilename.GetBuffer(0))); ...... }