您的位置:首页 > 移动开发

一步一步使用USkin免费换肤开发包(转载www.thirdwolf.com)

2005-09-16 21:08 561 查看

准备工作

              在您阅读这篇文章的时候,我们假定您对vc6.0有一定的了解,使用过vc6.0。如果您刚刚使用vc6.0或者vc7.0也没有关系,我们会作详细的介绍。

输出文件夹

最开始,让我们做一些准备工作。先以vc6.0作为开发环境。新建一个基于对话框的HelloWord.如图:

注意我们用红色圈标出来的地方。大家可以看到,我们的目录放的比较深,为什么要放的这么深的目录,直接放在E:目录不好么?这和我们接下来所讲的内容相关。建议大家最好也把目录弄得和我们类似比如D:/Dev/Samples/MyDlgHello.
 
接下来选择基本对话框选项后直接Finish向导。那么建立了MyDlgHello工程。我们打开工程菜单,选择设置菜单:

请大家注意General页的输出文件选项。就是我们红色的圈所标出的地方。相信大家都知道,这个是生成.exe的输出文件夹,使相对路径。即相对于我们当前工程所在路径E:/Dev/Samples/MyDlgHello的路径。那么Debug目录对应的真实目录为E:/Dev/Samples/MyDlgHello/Debug目录为了加深理解,我们先按确定,然后编译。
在E:/Dev/Samples/MyDlgHello/Debug目录中内容如下

当我们调整输出文件夹时,会发生什么样的结果?好调整为../../Bin

确定后,编译。在E:/Dev/Bin目录下,生成了MyDlgHello.exe。不错../就是相对于E:/Dev/Samples/MyDlgHello往上一级目录。即E:/Dev/Samples,再加个../后,路径为E:/Dev,加上\Bin就变成了E:/Dev/Bin目录,所以输出文件夹的真实路径为E:/Dev/Bin目录,我们编译生成的.exe就放到了这里。

工作目录

接下来,我们看看工作目录,依然是点工程设置菜单

现在这个目录是空的,表示缺省的工作目录是E:/Dev/Samples/MyDlgHello目录,为了加深理解。
我们在E:/Dev/Samples/MyDlgHello目录新建一个文件test.txt,然后写入一行文字Hello World!
对话框上添加一个按钮。然后添加事件代码。
加入代码,这些代码的意思,就是从test.txt文件中读取一行文本,然后再通过对话框显示出来。
void CMyDlgHelloDlg::OnButton1()
{
       // TODO: Add your control notification handler code here
       CStdioFile fTest;
       if(fTest.Open(_T("test.txt"),CFile::modeRead,NULL)==TRUE)
       {
              CString strLine;
              fTest.ReadString(strLine);
              AfxMessageBox(strLine);
              fTest.Close();
       }else
{
       AfxMessageBox(“打开不成功!!!”);
}
}
编译后运行。

正常运行了,现在问题也出来了,为什么Exe文件在E:/Dev/Bin目录下,test.txt文件在E:/Dev/Samples/MyDlgHello目录下,而我们的代码fTest.Open(_T("test.txt"),明明是打开相对路径test.txt,即和MyDlgHello.exe再同一目录下才对。为什么会这样???
接下来我们打开E:/Dev/Bin/MyDlgHello.exe,看看运行结果。
不成功了!!!!!!因为在E:/Dev/Bin目录下不存在test.txt文件。我们剪切E:/Dev/Samples/MyDlgHello目录下的test.txt到E:/Dev/Bin目录下,再运行E:/Dev/Bin目录下的MyDlgHello.exe。

成功了!!!!!!!这也就解释了,为什么我们在开发环境中运行读取文件能成功,可是进入Debug或者生成exe的目录,却还要拷贝数据到相应目录下才能成功!
 
问题来了,怎样统一?开发环境和实际运行的都能正常运行?聪明的朋友可能已经想到了,不错,答案就是设置工作目录。
好,让我们来动手设置。

好,编译运行,首先在开发环境运行。Ok,成功了!注意,这个时候,E:/Dev/Samples/MyDlgHello目录下test.txt应该已经被删除了。好,打开E:/Dev/MyDlgHello.exe来运行。Ok,也成功了。

Vc7.0中的设置

原理是一样,我就不介绍了,只抓个图片出来。

使用USkin

我们仍然以vc6.0作为示例讲解的开发环境。
学习了输出文件夹和工作目录后,我们拷贝USkin.dll,USkin.lib到E:/Dev/Bin目录下。因为调用USkin.dll的exe需要USkin.dll在同一目录下,所以放在Bin目录下。同时拷贝一个皮肤文件到Bin目录下,如corona.uskn,如果你没有corona.uskn,你可以将其他.uskn文件重命名为corona.uskn
将Include文件夹拷贝到E:/Dev/目录下。这只是头文件信息。
打开MyDialogHello.cpp,加上
             #include "../../Include/USkin.h"
#define USKIN_DLL_IMPORT
如下:
// MyDlgHello.cpp : Defines the class behaviors for the application.
//
 
#include "stdafx.h"
#include "MyDlgHello.h"
#include "MyDlgHelloDlg.h"
 
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
 
#include "../../Include/USkin.h"
#define USKIN_DLL_IMPORT
/////////////////////////////////////////////////////////////////////////////
// CMyDlgHelloApp
 
BEGIN_MESSAGE_MAP(CMyDlgHelloApp, CWinApp)
       //{{AFX_MSG_MAP(CMyDlgHelloApp)
              // NOTE - the ClassWizard will add and remove mapping macros here.
<
c3e5
font face="Times New Roman">              //    DO NOT EDIT what you see in these blocks of generated code!
       //}}AFX_MSG
       ON_COMMAND(ID_HELP, CWinApp::OnHelp)
END_MESSAGE_MAP()
 
4.填写调用代码
       BOOL CMyDlgHelloApp::InitInstance()
{
       AfxEnableControlContainer();
 
       // Standard initialization
       // If you are not using these features and wish to reduce the size
       //  of your final executable, you should remove from the following
       //  the specific initialization routines you do not need.
 
#ifdef _AFXDLL
       Enable3dControls();                     // Call this when using MFC in a shared DLL
#else
       Enable3dControlsStatic();      // Call this when linking to MFC statically
#endif
      
       //调用
       USkin_InitUSkin(NULL,NULL,_T("corona.uskn"));
       CMyDlgHelloDlg dlg;
       m_pMainWnd = &dlg;
       int nResponse = dlg.DoModal();
       if (nResponse == IDOK)
       {
              // TODO: Place code here to handle when the dialog is
              //  dismissed with OK
       }
       else if (nResponse == IDCANCEL)
       {
              // TODO: Place code here to handle when the dialog is
              //  dismissed with Cancel
       }
      
       //由于是对话框程序,直接在这里
       USkin_ExitUSkin();
       //其他的需要在ExitInstance中填入USkin_ExitUSkin
 
       // Since the dialog has been closed, return FALSE so that we exit the
       //  application, rather than start the application's message pump.
       return FALSE;
}
5.配置Lib文件

6.编译,运行

Vc7.0中的设置

常见问题

为什么我用vc7转换工程工具转换到vc6中,编译通过,可是没有效果?
因为转换工具没有转换工作目录这一设置,丢失信息了。所以不能加载皮肤文件,导致没有效果。
为什么我用了之后,没有显示效果?
依然是工作目录设置的原因。不明白,请看工作目录这一节
免费版USkin是不是有功能限制?
没有任何功能上的限制,不会有提示对话框说要注册,也没有日期限制。在USkin_InitUSkin(char* lpszUserName,char* lpszRegCode,char* lpszFileName);中
lpszUserName,和lpszRegCode为NULL就可以正常使用。请大家不要填入其他的参数。这些参数是留给那些只想自己设计的皮肤自己才能使用的朋友们用的。

结束语

感谢大家对USkin的支持,如果您觉得USkin不错,请把它推荐给您的朋友。希望朋友们能推荐给软件下载站,让更多的人加入到使用USkin的队伍中来。记住:USkin—You .Skin.面向个人用户免费的换肤软件。
同时我们欢迎大家给我们提出宝贵的意见和建议http://www.thirdwolf.com/bbs。如果您具备美术功底,我们也希望您能提供界面资源,共享给大家。
更多信息尽在www.thirdwolf.com。第三狼多媒体科技工作室与您共建未来!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐