【SkinMagic使用流程】
1.工程配置SkinMagic相關文件
2.初始化SkinMagic皮膚文件,窗體加載皮膚
3.釋放皮膚資源
特別聲明,SkinMagic要是破解版的,如果不是,可能需要先破解!
1.工程配置SkinMagic相關文件
在給窗體或對話框加載皮膚的時候首先要把使用SkinMagic所用到的相關Dll、.h文件、Lib包含到工程目錄下:
SkinMagicLib.h :放到工程的根目錄
SkinMagic.lib :放到工程的根目錄或者放到其他目錄,后者需要工程添加現有項,添加進資源文件
SkinMagic.dll :放到debug調試目錄
最后把相關的.smf皮膚文件放置到根目錄,例如根目錄的SkinMagic文件夾下。路徑:SkinMagic/corona.smf。
以下版本的編譯出來的程序運行時不再依賴SkinMagic.dll
SkinMagicLibMD6.lib 靜態鏈接庫,用於VC6的Release版編譯
SkinMagicLibMT6.lib 靜態鏈接庫,用於VC6的Debug版編譯
2.初始化SkinMagic皮膚文件,窗體加載皮膚
步驟如下:
1.在工程的stdafx.h里加載SkinMagicLib.h和SkinMagic.lib,盡量放在最后include,防止報錯
#include "SkinMagicLib.h" #pragma comment(lib,"SkinMagic")//也可以在依賴項里面設置
或者:
1、將SkinMagic.dll放置在調試目錄
2、設置庫文件目錄,在項目[鏈接器]的[附加依賴項]中加入庫SkinMagic.lib
3、在項目的stdafx.h文件中加入頭文件 #include "SkinMagicLib.h"
2.初始化SkinMagic庫
要使用SkinMagic,這一步必不可少。在App(應用程序)類的InitInstance()函數創建主窗口之前,添加初始化SkinMagic資源的代碼。
InitCommonControlsEx(&InitCtrls);
//初始化皮膚庫,關鍵在第一個要獲取實例句柄。其他可為NULL。 VERIFY(1 == InitSkinMagicLib(AfxGetInstanceHandle(), NULL, NULL, NULL));
對話框:
InitCommonControlsEx(&InitCtrls);在這之后添加
單文檔:
在ClassView中找到CxxxAPP類.然后找到InitInstance()函數,然后在
m_pMainWnd->ShowWindow(SW_SHOW);
m_pMainWnd->UpdateWindow();在這之前添加
說明:
int InitSkinMagicLib( //初始化SkinMagic工具庫
HINSTANCE hInstance, //應用程序句柄
char* szApplication , //皮膚文件中定義的應用程序名,置為NULL即可
char* szRegCode, //SkinMagic的使用注冊碼。若無置為NULL
char* szReserved2 //保留位,為NULL
);
3.加載皮膚文件。
可以在App(應用程序)類的InitInstance()函數中也可以在Dialog的OnInitDialog()中加載。
加載分兩種:(1)添加皮膚文件到資源中,並編譯到程序中。
(2)程序在運行時動態加載皮膚文件。
靜態加載:比如添加corona.smf,設置資源類型為"SKINMAGIC", 資源ID為IDR_SKIN_CORONA,
注意:可能會報IDR_SKIN_CORONA為未聲明的標識符,這時需要添加頭文件”Resource.h“
VERIFY(1 == LoadSkinFromResource(NULL, (LPSTR)IDR_SKIN_CORONA, "SKINMAGIC"));
動態加載:比如根目錄下SkinMagic文件夾。路徑:SkinMagic/corona.smf。
VERIFY(1 == LoadSkinFile("SkinMagic/corona.smf"));
說明:
//資源名稱帶有雙引號
int LoadSkinFromResource(
HMODULE hModule, //包含皮膚文件的模塊句柄,若NULL表面在本模塊中
char* lpSkinName , //皮膚資源的名稱
char* lpType); //資源的類型
4.為窗口添加皮膚:
1)為標准窗口(擁有標題欄、系統菜單、可變大小等特征,比如文檔/視圖結構和有菜單的對話框)添加皮膚,通常用於主窗口.
在應用程序類的InitInstance()函數的底部加入如下代碼
VERIFY( 1 == SetWindowSkin( m_pMainWnd->m_hWnd , "MainFrame" )); m_pMainWnd->ShowWindow(SW_SHOW); m_pMainWnd->UpdateWindow();
說明:
int SetWindowSkin(
HWND hWnd, //要使用皮膚的窗口句柄
char* lpSkinName //為skinFrameWnd對象指定的名稱
);
2)為對話框添加皮膚
在對話框顯示之前調用,通常在應用程序初始化函數中調用.
CNetworkDlg dlg; m_pMainWnd = &dlg; VERIFY( 1 == SetWindowSkin( m_pMainWnd->m_hWnd , "MainFrame" )); VERIFY( 1 == SetDialogSkin( "Dialog" ) ); INT_PTR nResponse = dlg.DoModal();
說明:
int SetDialogSkin(
char* lpSkinName //為skinFrameWnd對象指定的名稱
);
使用該函數后,以后程序創建的對話框都將使用該皮膚,但對話框大小不可變。
3)為單個對話框窗口添加皮膚
例如在對話框視圖中:重載對話框視圖的創建函數OnCreate,加入如下代碼:
VERIFY( 1 == SetSingleDialogSkin( m_hWnd, "Dialog" ) ); EnableWindowScrollbarSkin( m_hWnd , SB_BOTH );
說明:
int SetSingleDialogSkin(
HWND hWnd, //要使用皮膚的窗口句柄
char* lpSkinName //為skinFrameWnd對象指定的名稱
);
int EnableWindowScrollbarSkin( //為滾動條添加皮膚
HWND hWnd, //要使用皮膚的窗口句柄
int* fnBar //要使用皮膚的滾動條,SB_BOTH表明是橫豎都是用皮膚
);
3.釋放皮膚資源
在App(應用程序)類中重載應用程序的ExitInstance()函數,
可仿照InitInstance()手動添加,也可在CxxxAPP類中,右鍵選AddVirtualFunction,然后添加ExitInstance()函數,在其中加入:
//釋放SkinMagic資源 ExitSkinMagicLib();
建議:
1. 在App類中InitInstance函數中先初始化一下Skinamgic,然后加載皮膚庫:
VERIFY( 1 == InitSkinMagicLib( AfxGetInstanceHandle(), _T("SCRIBBLE") , NULL, NULL ) );//初始化SkinMagic
VERIFY( 1 == LoadSkinFile(_TEXT("AlphaOS.smf")));//加載皮膚文件
然后在Dlg類中的OnInitDialog換膚:
SetDialogSkin(_T("Dialog")));
附件:見文件
有關鏈接:
http://blog.csdn.net/colinchan/article/details/1572182
http://www.cnblogs.com/tianlangshu/archive/2011/03/20/1989436.html
http://blog.csdn.net/nonecode/article/details/7951975