|
Using
Skin++ For Visual C++ (Skin++ For Visual C++ 使用入门) |
本文介绍如何在Visual C++ 中使用Skin++。
Skin++可以于3种方式被VC程序调用:
隐式链接Skin++动态链接库、显示链接Skin++动态链接库、链接Skin++静态链接库。
本文将分别介绍以上3种方式的调用方法与注意事项。
关于动态链接库与静态链接库的基础知识请参考《动态链接库与静态链接库的基础知识》
纲要:
引言
Skin++对Visual C++ 进行了全面的支持,提供3种调用Skin++方法。为了便于管理,Skin++提供了 统一的头文件SkinPPInc.h。
通过该头文件和工程属性中C/C++宏定义,即可完成Skin++的相应方法的调用。[回到纲要]
1、在工程文件中,如stdafx.h中包含SkinPPInc.h文件:#include “SkinPPInc.h”;
2、拷贝下列文件到当前工程目录下
SkinPPInc.h、SkinPlusPlus.lib、SkinPlusPlus.dll、PixOS.ssk (皮肤文件);
3、在应用程序入口处,添加Skin++的加载加载皮肤文件函数。
BOOL CTestSkinPPDialogApp::InitInstance(){
sppLoadSkin(_T("PixOS.ssk"));
。。。。。。
}
4、编译运行,调用成功。[回到纲要]
Skin++采用动态链接库时由于在Skin++ DLL的DLL_PROCESS_DETACH中调用了sppExitSkin函数,
所以用户不需要在程序中调用sppExitSkin,Skin++会自动释放所占资源。[回到纲要]
显式链接Skin++动态链接库:
在显式链接下,应用程序必须进行函数调用以在运行时显式加载 DLL。为显式链接到 DLL,应用程序必须:调用
LoadLibrary(或相似的函数)以加载 DLL 和获取模块句柄。调用
GetProcAddress,以获取指向应用程序要调用的每个导出函数的函数指针。由于应用程序是通过指针调用 DLL 的函数,编译器不生成外部引用,故无需与导入库链接。使用完 DLL 后调用 FreeLibrary。
Skin++对这种方式提供了CSkinPPDynamicCallDll类,该类提供2个构造函数:
1)
默认构造函数 CSkinPPDynamicCallDll(),一般在调用Skin++的头文件中可以先声明该类的对象,这样就需要用到默认的构造函数,在需要将Skin++ Dll加载进来时,调用该类的Initialize方法,方法的参数为Skin++ Dll的名称默认情况下为SkinPlusPlus.dll.
2)
带Dll名称参数的构造函数 CSkinPPDynamicCallDll(LPCTSTR strDllPathName),该构造应用在即时使用Skin++的场合。通过该构造函数,用户不再需要调用该类的Initialize方法。
在该类析构时会自动将Skin++ Dll释放掉,并进行相应的资源清理工作。所以一般情况下用户不需要关心Skin++ Dll手动释放的问题。
如果用户需要在该类被析构之前进行Dll的释放,请调用该类的Exit()方法。
要调用该类,请先在工程中定义 _SKINPP_DYNAMICCALLDLL。
或在StdAfx.h 的#include “SkinPPInc.h”前写上#define _SKINPP_DYNAMICCALLDLL
如下:
#define
_SKINPP_DYNAMICCALLDLL
#include
“SkinPPInc.h”
简单起见,我们直接在上面的工程TestSkinPPDialog中进行添加。
接下来,我们在CTestSkinPPDialogApp类声明CSkinPPDynamicCallDll的对象:
CSkinPPDynamicCallDll
m_sppDynamicCall;
在应用程序入口处,添加对Skin++皮肤的加载方法。
BOOL CTestSkinPPDialogApp::InitInstance()
{
m_sppDynamicCall.Initialize(NULL);
m_sppDynamicCall.LoadSkin(_T("PixOS.ssk"),FALSE);
。。。。。。
}
至此,动态调用Skin++ Dll成功。[回到纲要]
Skin++ 提供Visual C++ 各个版本各种编译条件下静态链接库。各版本Skin++静态库的名称均有所不同。
Skin++ 静态链接库的命名规则:

1.
SkinPPStatic为Skin++静态链接库的前缀缩写 ;
2.
S 为静态链接MFC或静态调用运行时库、D为动态链接MFC或动态调用运行时库。
以VC6为例,在工程设置的C++ 页面的"Use
run-time &library:"段中可以看到其设置,如果在下边的ComboBox框
中选择的名称后面带DLL的,那么说明你们的工程是动态调用运行时库,如果没有带DLL文字,那就说明是静态调用
运行时库。一般情况下,用户不需要改变其设置,该设置会随着选择静态链接MFC或动态链接MFC的改变而改变。
如果当前工程是静态链接MFC的,那么你的工程就是静态调用运行时库,如果是动态链接MFC的,那么就是动态调用
运行时库。
如果你的程序是Win32 SDK,那么这个时候,你需要自己来确定选择哪种方式来调用运行时库,并选择合适的Skin++ 静态链接库。
3.R为Release的意思。由于静态链接库必须保证Release版本的静态库对应Release版本的调用程序,Debug版本的静态库对应Debug
版本的调用程序,所以Skin++ 为不同的版本提供了相对应的Skin++ 静态链接库。
D为Debug的意思。
4.A为ANSI编码方式。U为Unicode编码方式。Skin++提供了2种编码方式的静态库。
5.静态链接库还必须要求开发工具的一致性。就是如果调用者是VC6工程,那么静态库也必须是VC6编译而成的。Skin++ 提供了
VC6,VC2003,VC2005 3个开发环境的所有版本的静态库。
例子1
问:我们现在有个VC2003的动态链接MFC的Debug工程,并采用Unicode编码方式,那么该选用哪个Skin++ 静态链接库?
答:请选择安装目录下的Visual C++ 2003目录中的SkinPPStaticDDU.lib
每个开发环境有8个版本的静态库,所以总共有24个版本的静态库。
为了便于调用,均在SkinPPInc.h中进行了静态库的自动调用,用户只需要在工程中包含SkinPPInc.h文件,
就可以完成对Skin++的调用。不再需要在工程中判断版本和编码方式。也不再需要拷贝令人头痛各种文件。[回到纲要]
Copyright@2004-2007 上海勇进软件有限公司,保留所有权利。
如果您对帮助系统有任何建议,可以直接发邮件到
Visual Studio,和Visual Studio logo 是微软公司在美国或在其他国家的注册商标。