MFC 程序打包换皮肤!

来源:互联网 发布:java基础入门培训费用 编辑:程序博客网 时间:2024/04/23 16:20

1.首先  这是皮肤代码

!addplugindir .
!include "MUI2.nsh"

Name "ISSkin"
OutFile "ISSkin.exe"

InstallDir "$LOCALAPPDATA\ISSkin"

RequestExecutionLevel user

!define MUI_ABORTWARNING
!define MUI_CUSTOMFUNCTION_GUIINIT ISSkinGUIInit

!insertmacro MUI_PAGE_WELCOME
!insertmacro MUI_PAGE_DIRECTORY
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_PAGE_FINISH

!insertmacro MUI_LANGUAGE "English"

Function ISSkinGUIInit
    InitPluginsDir
    File "/oname=$PLUGINSDIR\skin.dat" "skin.dat"
    ISSkinEx::nsLoadSkin /NOUNLOAD "$PLUGINSDIR\skin.dat" "NormalSkin.ini"
FunctionEnd

Function .onGUIEnd
    ISSkinEx::nsUnloadSkin
FunctionEnd

Section SecDummy

SectionEnd

2.准备NSIS打包软件的.dll链接库如:ISSkinEx.dll

把dll文件放在这个路径下:C:\Program Files\NSIS\Plugins\ISSkinEx.dll

3.这时候 编译运行如果不出错  皮肤将会改变如下图:

4,但是我安装的时候报错了  原因是因为已经存在了同名的安装皮肤函数

错误如下:onFUIEnd  函数重复


那这时候加入的时候要注意。如果你的代码里有:
!define MUI_CUSTOMFUNCTION_GUIINIT XXXXXX
你则只需要把 Function ISSkinGUIInit 里的代码考到你的:
Function XXXXXX
函数中,即追加到这个函数里面去。
!define MUI_CUSTOMFUNCTION_GUIINIT XXXXXX
Function XXXXXX

!define MUI_CUSTOMFUNCTION_GUIINIT ISSkinGUIInit
Function ISSkinGUIInit
就是一样的,只不过换了个名字而已。
对于这情况。比如我提供的叫本有这个:
!define MUI_CUSTOMFUNCTION_GUIINIT ISSkinGUIInit
Function ISSkinGUIInit
  ;皮肤相关代码
FunctionEnd
你只需要把 ISSkinGUIInit 里的内容移动到你原脚本:
!define MUI_CUSTOMFUNCTION_GUIINIT XXXXXX
Function XXXXXX
  ;原有代码
FunctionEnd
增加为:
!define MUI_CUSTOMFUNCTION_GUIINIT XXXXXX
Function XXXXXX
  ;原有代码
  ;皮肤相关代码
FunctionEnd
如果没有的话,那你自然要创建一个函数了。最简单的就是把:
!define MUI_CUSTOMFUNCTION_GUIINIT ISSkinGUIInit
Function ISSkinGUIInit
  ;皮肤相关代码
FunctionEnd
整个复制过去就行了。
5.参考整个代码见 http://blog.csdn.net/dyllove98/article/details/8762519
6.注意一个小问题,NSIS 自身可以定义界面的图片

!define MUI_WELCOMEFINISHPAGE_BITMAP "wiz_is.bmp"
wiz_is.bmp  图片尺寸164×290比较适合





原创粉丝点击