如何使用SkinMagic2.2来为VC程序界面进行美化

由于毕业设计的需要,我使用VC开发一个程序,由于VC6.0是98年的产品,开发出来的标准程序界面在当下VISTA盛行的年代实在不敢让人恭维。而程序的UI对于一个软件的价值又是非常之巨大。所以我决定对软件界面进行美化。一般来说,进行美化有两种方法,第一种是从MFC的各个控件基类开始继承,重载所有控件的绘制函数,或者通过消息响应和消息反射,截获界面重绘时的消息,编写消息响应函数来修改掉默认的绘制样式。这对于一个编程高手来说当然不是什么问题,但是对于新手或者时间有限的人来说,则比较费力。第二种就是使用现成的一些界面库,来完成界面的美化。这样的库现在也有不少。但是大多数是国外的,国内的这方面产品比较少,而且大多数功能不是很强大,对于VC下的这些库,大多数不支持文档视图结构,只在对话框下有用。看来这方面是需要国内的程序员努力的。说不定以后,我会和我一位朋友合作开发一个类似于USKIN的国产皮肤库,免费提供给大家使用。呵呵:)

   话入正题,这里我们选用了SkinMagic,这个库不错,支持SDI和MDI,同时有很多不错的界面文件。而且网上也有不少的破解版。当然,在经济许可的情况下,我绝对支持正版。不过这里是在学习,所以只讨论技术。不涉及其他。这里我们选用了2.2版本。如果你需要最新版,请到www.skinspeed.com看看。这里需要的文件如下图所示:

两个库文件,一个头文件,一个皮肤文件。

最终的效果图如下图所示:

这个是SDI界面。MDI类似。

在vc工程中,切换到资源文件夹,新建一个资源,点击自定义,资源类型定义为SKINMAGIC,然后再该类型资源中引入smf皮肤文件。设置该引入的皮肤文件的资源ID为皮肤的名字,比如说KROMO。

将四个文件都复制到项目根文件夹,点击工程菜单,添加到当前工程,文件,将除皮肤外的文件都添加到项目中。

在CWinAPP类的initinstance函数中添加如下代码:


BOOL CFgdsApp::InitInstance()
{
//===================加载皮肤并且设置皮肤窗口================*/
    VERIFY( 1 == InitSkinMagicLib( AfxGetInstanceHandle(), NULL ,
        NULL,
        NULL ) );//初始化
   
    VERIFY( 1 == LoadSkinFromResource( AfxGetInstanceHandle(), "KROMO" ,"SKINMAGIC") ); //导入资源
//==================================//    
   
AfxEnableControlContainer();

然后在该函数下面添加下列代码:

if (!ProcessShellCommand(cmdInfo))

   return FALSE;
//=============================================//

VERIFY( 1 == SetWindowSkin( m_pMainWnd->m_hWnd , "MainFrame" ));//对DOC/VIEW结构程序体进行换肤。
    VERIFY( 1 == SetDialogSkin( "Dialog" ) );//对对话框进行换肤
    /*==========================END===========================*/
// The one and only window has been initialized, so show and update it.
m_pMainWnd->ShowWindow(SW_SHOW);
m_pMainWnd->UpdateWindow();
然后在stdafx.h下方添加#include "SkinMagicLib.h"

然后编译,链接,运行。就可以了。

现在,运行的时候,你会发现美化后的程序上有Powered By SkinMagic字样,这对于我们来说,并不是必要的。对于破解版的控件来说,那么如何去除呢?这里采用“暴力破解”。也就是说,直接修改二进制文件的方法。

首先,我来介绍一下UltraEdit这个工具,这个工具是一个非常强大的十六进制编辑器。可以在十六进制模式下打开文件。因为无论是什么样的软件,无论如何加密,最终都会以二进制流的方式写入文件。这时候一般来说,可以通过修改二进制的方式来完成一些修改。比如版权之类的信息。但是需要注意的一点是必须是十六进制的模式下修改,而且修改前的信息和修改后的信息所占据的空间必须一致,否则,对于可执行文件来说,可能导致函数入口点地址的改变,也就无法正常运行了。

首先,使用UltraEdit打开SkinMagicLib.lib文件,选择搜索替换命令,弹出替换对话框,设置查找信息为[Powered By SkinMagic]。同时勾选查询ASCLL码。

替换对话框设置如下图所示:

下面是使用UltraEdit打开后进行搜寻的情形:

然后再次点击搜索->替换命令,弹出上图所示的替换对话框,在替换为文本框中输入22个空格,之所以是22个,是因为[Powered By SkinMagic]是22个字符,占据22个字节,我们必须也填满这个空间,保证地址不会发生改变。这里因为我们不希望在程序标题栏看到这些字符串,我们可以将这些内容变为空格,这样就看不到了,这就是为什么用22个空格替换的原因。输入22个空格之后,点击全部替换。填充之后,刚刚显示的5B 50 6F等数据就会全部变为20 20 20 等数据,说明替换完毕。之所以20,是因为空格键的ASCII码是32,ASCII为十进制的,换算成十六进制就是0x20。这里不再解释,请参阅计算机组成与结构等书籍。

保存。然后重新组建你的程序,现在那几个烦人的字母是不是已经消失了?呵呵。

如下图所示:


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值