1 安裝skinmagic
下載地址,http://download.csdn.net/detail/moonshine99/3916884,安裝文件及例子還有破解的dll都有
2 安裝後破解:去C:\Program Files\Appspeed\SkinMagic Toolkit 2.4 trial\Bin,將
SkinMagicTrial.dll覆蓋
3 打開vs2008(我用的是vs2008測試的)
複製到工程目錄下skinmagiclib.h,skinmagic.lib,skinmagic.dll
4 在stdafx.h中加入頭文件和庫的引用,如下:
#include "SkinMagicLib.h"
#pragma comment(lib, "SkinMagic.lib")
5 初始化SkinMagic庫:
在 CxxxApp::InitInstance()中加入初始化SkinMagic庫的代碼:
VERIFY( 1 == InitSkinMagicLib(AfxGetInstanceHandle(), NULL, NULL, NULL));
6、調入皮膚文件:
皮膚的調用有兩種方法,一是直接從皮膚文件中調用,另一種方法是從資源文件中調用,分別說明如下
:
1) 從皮膚文件中調用皮膚:
int __stdcall LoadSkinFile( LPCTSTR lpSkinFile );
2)從資源文件中調用皮膚:
int __stdcall LoadSkinFromResource(HMODULE hModule, LPCTSTR lpSkinName , LPCTSTR lpType);
現在CxxxApp::InitInstance()中的代碼如下:
BOOL CxxxApp::InitInstance()
{
VERIFY( 1 == InitSkinMagicLib(AfxGetInstanceHandle(), NULL, NULL, NULL));
VERIFY( 1 == LoadSkinFile("corona.smf"));
//或者添加資源,然後載入資源 VERIFY( 1 == LoadSkinFromResource( AfxGetInstanceHandle(),
//"DEFAULT" ,"MagicSkin") ); //其中DEFAULT爲皮膚的資源名,MagicSkin爲皮膚資源的目錄
AfxEnableControlContainer();
//…..下略
}
7 將皮膚應用到程序上
int __stdcall SetWindowSkin( HWND hWnd , LPCTSTR lpSkinName );
int __stdcall SetDialogSkin( LPCTSTR szSkinName );
1)對話框程序代碼位置:
BOOL CxxxApp::InitInstance()
{
//...上略
m_pMainWnd = &dlg;
VERIFY( 1 == SetWindowSkin( m_pMainWnd->m_hWnd , "MainFrame" ));
VERIFY( 1 == SetDialogSkin( "Dialog" ) );
int nResponse = dlg.DoModal();
//…下略
}
2)文檔視圖程序代碼的位置
BOOL CxxxApp::InitInstance()
{
//…上略
m_pMainWnd->ShowWindow(SW_SHOW);
m_pMainWnd->UpdateWindow();
VERIFY( 1 == SetWindowSkin( m_pMainWnd->m_hWnd , "MainFrame" ));
VERIFY( 1 == SetDialogSkin( "Dialog" ) );
return TRUE;
}
8 釋放SkinMagic資源
void __stdcall ExitSkinMagicLib();
重載應用程序的ExitInstance()函數,添加如下代碼:
int CxxxApp::ExitInstance()
{
ExitSkinMagicLib();
return CWinApp::ExitInstance();
}
源文檔 <http://hi.baidu.com/%B2%AE%B2%AE%D1%CC%B3%
BE/blog/item/24e6f60b90232adc63d986e2.html>
SkinMagic使用的基本方法及高級方法 (轉載)
1. SkinMagic使用的方法
1.1 初始化皮膚控件 InitSkinMagicLib
例: nInitSkinMagicLib=InitSkinMagicLib( AfxGetInstanceHandle(),_T("LSA") ,NULL,NULL);加載皮
膚文件 LoadSkinFile(根據文件路徑進行加載)或LoadSkinFromResource(根據資源名稱進行加載)。
例:nLoadSkinFile=LoadSkinFile(sSkinFilePath);
1.2 使用SetDialogSkin或者SetSingleDialogSkin或者SetShapeWindowSkin給窗體加載皮膚
這三者是有區別的。
1.3.1 SetDialogSkin是給所有的窗體均加載同樣的皮膚。不建議使用這個函數。除非你的軟件均使用同
樣的皮膚。
1.3.2 SetSingleDialogSkin給單個指定的窗體加載皮膚。窗口的顯示方式是規則窗體。
1.3.3 SetShapeWindowSkin 給單個指定的窗體加載皮膚。窗口的顯示方式爲非規則窗體。
2.SkinMagic使用的高級方法
2.1 RemoveWindowSkin去掉指定窗體上的皮膚
當某個窗體或者控件不需要皮膚時可以使用此函數
2.2 RemoveDialogSkin 停止自動給窗體加載皮膚。主要是針對SetDialogSkin的。
2.3 EnableWindowScrollbarSkin 給指定窗體加載滾動條皮膚。比較適用於自繪的控件。
例:nSkin=EnableWindowScrollbarSkin(GetDlgItem(IDC_DLGTREE_EXPORT)->m_hWnd,SB_BOTH);
2.4 DisableWindowScrollbarSkin 使指定窗體停止加載滾動條皮膚。
2.5 如何給Splitter加載皮膚
2.5.1 皮膚文件中自定義Splitter
2.5.2 打開Splitter
例:m_hSkin = OpenSkinData( _T("SkinSplitter") );
2.5.3重載函數OnDrawSplitter
詳見系統管理源代碼中類AW_CMultiViewSplitter
2.6 如何從皮膚文件中獲取圖片 CreateBitmapFromSkinImage
例:m_hBitMap=CreateBitmapFromSkinImage(_T("listheader.bmp"));
2.7 當一個窗體上同樣的控件類型同時既有自繪也有加載皮膚的處理方法
在皮膚文件新建一個窗體,名稱比如叫做FrmWnd-D,上面放置皮膚控件,例如是個Static控件,叫做Static
-D。使用的例子如下: nSkin=SetControlSkin(GetDlgItem(IDC_STATIC_MAIN_TITLE)->m_hWnd,_T
("Static-D"),_T("FrmWnd-D"));
nSkin=SetControlSkin(GetDlgItem(IDC_STATIC_SUB_TITLE)->m_hWnd,_T("Static-D"),_T
("FrmWnd-D"));
2.8 當自繪控件與加載皮膚的窗體衝突時的解決方法
解決方法是先對窗體加載皮膚,再建立控件自繪的功能。
具體的做法是:
1. DoDataExchange取消自繪控件實例與資源控件ID的關聯
2. 在SetSingleDialogSkin之後自繪控件實例採用SubclassDlgItem的方法與資源控件ID關聯。
例:VERIFY( 1 == SetSingleDialogSkin(this->GetSafeHwnd(), _T("Dialog") ) );
m_list.SubclassDlgItem(IDC_LIST1,this);
源文檔 <http://www.sciencenet.cn/m/user_content.aspx?id=287235>