magicskin在vc中的使用

magicskin在vc中的使用


经过努力试验终于搞定了,写下过程: 

我发现我没有使用从vckbase下载的破解版的lib文件。 


在对话框程序里使用skinmagic皮肤控件 

先把skinmagiclib.h文件拷贝入工程目录, 

在左边的fileview卡片里面,在Resource files栏目加入SkinMagicLib.lib和DETOURS.lib,这两个文件的路径在哪里无所谓,只要加入就行。可以把它们拷贝入工程的目 录下。还有,可以把smf皮肤文件都拷贝入工程的目录下,方便加载皮肤。 

在FileView卡片里面加入SkinMagicLib.h文件,并在stdafx.h中加入#include "SkinMagicLib.h" 

在C**App类的文件里面找到InitInstance函数 

在函数开始部分加入 

VERIFY( 1 == InitSkinMagicLib( AfxGetInstanceHandle(), "Demo" , 

       NULL, 

       NULL ) );//Demo字样可以随意修改 

VERIFY( 1 == LoadSkinFile("corona.smf") ); //皮肤文件只要在同一目录下就行。如果没有 

//就编译出错 

按Ctrl+W,看到ClassWizard,再给C**App类加入ExitInstance函数 

内容是 

ExitSkinMagicLib();//为了退出时清理内存 

return CWinApp::ExitInstance(); 

在C**Dlg::OnInitDialog()函数里面 

结束部分加入 

SetWindowSkin( m_hWnd , "Dialog" ); 

SetDialogSkin("Dialog"); 

加一个按钮或者菜单,内容是“load skin” 

添加按钮点击事件的代码为 

char strExt[]= "SkinMagic Files(*.smf)|*.smf||"; 

CFileDialog dlg( TRUE, "*.smf", "*.smf" , OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT 

               , strExt , this ); 


if( dlg.DoModal() == IDOK ) 

LoadSkinFile( (char*)(LPCSTR)(dlg.GetPathName()) ); 

这样就能够随意从文件里面加载皮肤了。 

又补: 


我又试验了一下,把下载的破解版SkinMagicLib.lib(大小2.4m),替换以前的lib文件(大小967k) 

也能够顺利编译。 

以下是破解版里面的readme 

//// 

SkinMagic 2.0B1 破解版 

作者:BingoStudio 

一、用Skin++要带DLL,SSK文件,很不爽!发现SkinMagic 2.0B1的皮肤可用资源,不用带DLL,真是方便! 

二、SkinMagic 2.0B1的下载版本是TRAIL版,编译后运行的提示框很讨厌,破之!! 

//// 

不明白他强调的是什么弹出的对话框,因为我一直没有看到有什么要注册的对话框出现,无论是原来的skinmagiclib.lib还是破解的skinmagiclib.lib


网络上的SkinMagic版本繁多,而且试用版,破解版并存,各版本之间支持的皮肤文件也不尽相同,因此经常有人在网上询问为何添加了 SkinMagic没有效果甚至导致程序崩溃之类的问题。这里有一个可用的破解版本(包含VC6使用的库和支持的常用皮肤文件)。请注意这个包的大小为 1.31M,如果小于1.31M说明下载不完全,则无法使用,建议使用迅雷下载。

一:文件说明

SkinMagicLib.h 必须的头文件,请添加到工程中。

SkinMagic.lib + SkinMagic.dll 动态链接库配套使用

编译时需要在工程中添加SkinMagic.dll,程序运行时需要SkinMagic.dll


以下版本的编译出来的程序运行时不再依赖SkinMagic.dll

SkinMagicLibMD6.lib 静态链接库,用于VC6的Release版编译

SkinMagicLibMT6.lib 静态链接库,用于VC6的Debug版编译


二:使用步骤

1。把SkinMagicLib.h, SkinMagicLibMT6.lib, SkinMagicLibMD6.lib放到你的VC6工程目录下

2。在StdAfx.h中添加

#include "SkinMagicLib.h"

3。在工程设置中添加对应的库

Win32 Release中填上SkinMagicLibMD6.lib 

Win32 Debug中填上SkinMagicLibMT6.lib


4。在InitInstance()函数的开始处添加初始化SkinMagic资源的代码。

VERIFY(1 == InitSkinMagicLib(AfxGetInstanceHandle(), NULL, NULL, NULL));


5。在InitInstance()函数中加载皮肤文件并设置程序皮肤。

你可以选择添加皮肤文件到资源中,并编译到程序中。或者程序在运行时动态加载皮肤文件

a. 比如添加corona.smf,设置资源类型为"SKINMAGIC", 资源ID为IDR_SKIN_CORONA

(也可以这样子. VERIFY( 1 == LoadSkinFile("corona.smf"));)

CBossKeyDlg dlg;

m_pMainWnd = &dlg;


//加载SkinMagic皮肤

VERIFY(1 == LoadSkinFromResource(NULL, (LPSTR)IDR_SKIN_CORONA, "SKINMAGIC"));

VERIFY(1 == SetWindowSkin(m_pMainWnd->m_hWnd, "MainFrame"));

VERIFY(1 == SetDialogSkin("Dialog"));


int nResponse = dlg.DoModalEx(bStartShow);

if (nResponse == IDOK)

{

}

else if (nResponse == IDCANCEL)

{

}

b. 程序在运行时动态加载皮肤文件


CBossKeyDlg dlg;

m_pMainWnd = &dlg;


//加载SkinMagic皮肤

VERIFY(1 == LoadSkinFile("corona.smf"));

VERIFY(1 == SetWindowSkin(m_pMainWnd->m_hWnd, "MainFrame"));

VERIFY(1 == SetDialogSkin("Dialog"));


int nResponse = dlg.DoModalEx(bStartShow);

if (nResponse == IDOK)

{

}

else if (nResponse == IDCANCEL)

{

}


6。在ExitInstance()函数中释放SkinMagic资源

//释放SkinMagic资源:

ExitSkinMagicLib();


trip:


貌似有点小问题, 在有些VC6工程中, Release版和Debug版编译都应该选择SkinMagicLibMD6.lib, 视乎你链接时使用的运行时库类型而定

你可能感兴趣的:(C++,c,C#,vc++)