CDialogSK---一個支持皮膚化的對話框類

無意中在網上看到一個對話框類CDialogSK---一個支持皮膚化的對話框類,頗感興趣

先看下CDialogSK是幹什麼的:(以下內容來自網上)

CDialogSK---一個支持皮膚化的對話框類

一、介紹
該類從MFC的CDialog繼承而來,支持如下特徵:
1、運行於win2000或者winxp平臺上,可以使用任何透明色以透視對話框的區域。
2、運行於win2000或者winxp平臺上,可以使得整個對話框透明。
3、使用位圖背景。位圖可以來自資源文件、bmp或者HBITMAP
4、設置背景類型:標題、中心、伸縮;設置對話框的大小適合位圖的大小
5、可以點擊對話框的任何部分允許/禁止移動對話框

二、用法
使用該類的方法如下:
1、往工程中加入文件CDialogSK.h和CDialog.cpp
2、在你的對話框類中包含CDialogSD.h
3、在你的對話框類中用CDialogSK代替所有的CDialog
4、如果要使用背景圖片,找到對話框屬性的類型選項,使得Style=Popup,

Border=None,並使Title Bar爲未選擇狀態。
5、在你的對話框類的OnInitDialog的結尾處,加入CDialogSK屬性方法的調用:
BOOL CSkinDialog_DemoDlg::OnInitDialog()
{
    ...
    EnableEasyMove();                       // 允許移動
    SetBitmap (IDB_BACKGROUND);             //設置背景位圖
    //SetStyle (LO_RESIZE);                   // 使對話框大小適合位圖大小
    SetStyle (LO_STRETCH);              // 使位圖大小適合對話框大小

    SetTransparentColor(RGB(0, 255, 0));    //設置透明色爲綠色

    return TRUE;
}
6、例如,假如你想生成一個圓形的對話框,可以創建一個圖片,背景爲綠,畫一個藍色的圓。然後,調用SetBitmap,參數爲圖像的路徑,調用SetTransparentColor,參數爲背景的顏色(綠色)。這樣就看不到背景,得到一給圓形的窗口。

三、方法
CDialogSK類提供如下的方法:
1、DWORD SetBitmap (HBITMAP hBitmap);
2、DWORD SetBitmap (int nBitmap);
3、DWORD SetBitmap (LPCTSTR lpszFileName);
4、void SetStyle (LayOutStyle style);
LO_DEFAULT, LO_TILE (標題圖片), LO_CENTER (中心圖片), LO_STRETCH (伸縮

圖片以適合對話框大小), or LO_RESIZE (伸縮對話框適合圖片). 
5、void EnableEasyMove (BOOL pEnable = TRUE);
6、BOOL SetTransparent (BYTE bAlpha);
使整個對話框透明,範圍爲0(透明)-255(不透明)。只適合win2000及以上版


7、BOOL SetTransparentColor (COLORREF col, BOOL bTrans = TRUE);
指定透明色。只適合win2000及以上版本。

CDialogSK類文件下載地址http://www.codeguru.com/code/legacy/dialog/CDialogSK_src.zip

我試着按照上面的方法實現了自己的對話框,編譯完成後發現運行時候會出現鏈接的錯誤:

warning LNK4232: 名稱test.exe 包含非ASCII 字符,在具有除936 以外的ANSI 代碼頁的系統上可能不能加載DLL .......

................

CDialogSK.obj : error LNK2019: 無法解析的外部符號 "__declspec(dllimport) const CDialogSK::`vftable'" (__imp_??_7CDialogSK@@6B@),該符號在函數 "public: __thiscall CDialogSK::CDialogSK(class CWnd *)" (??0CDialogSK@@QAE@PAVCWnd@@@Z) 中被引用........

這讓我很費解,網上搜索沒找到原因,結果我想這個類已經是很老的了,沒準有什麼地方不支持我現在用的vs2005,於是同樣的方法換用VC6重新試了下,果然成功。儘管不知道是什麼原因導致的,但高興之餘還是把這個經驗記下來

以上內容出自:http://blog.csdn.net/wanjingwei/archive/2010/01/23/5248698.aspx

 

經過在VS2010中測試,找到 無法解析的外部符號 "__declspec(dllimport) const CDialogSK::`vftable'" 的解決方法有2種:

第一種:必須把項目屬性中的 MFC的使用設置爲“在靜態庫中使用 MFC”,否則就會出錯。相應的運行庫得改爲MT或MTD。

第二種:把“class AFX_EXT_CLASS CDialogSK : public CDialog”改爲“class CDialogSK : public CDialog”,即去掉“AFX_EXT_CLASS ”

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章