[MFC美化] SkinMagic使用詳解1- SkinMagic使用流程


【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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM