自定义页面大小

ily*_*lya 3 nsis

我正在尝试创建一个显示我的网站(nsWeb::ShowWebInPage)的页面.问题是,它无法显示整个页面.

如何为此页面定义新尺寸(高x宽)?

And*_*ndy 8

这是一项艰巨的任务.以下是以一种灵活的方式使其工作的步骤.

下载资源黑客:http://www.angusj.com/resourcehacker/

然后决定是否要编辑NSIS的Unicode或ANSI版本.你可以做到这两点,但为什么要这么麻烦.首先找到您的Program Files\NSIS文件夹.如果要编译ANSI,这将是下一步中以下目录的BASE文件夹.如果您正在编译unicode,然后进入Program Files\NSIS\Unicode文件夹,现在这是您下一步的基本文件夹.

查看\ Contrib\UIs文件夹.该文件夹存储了一堆可执行文件.根据您使用的MUI2的配置,您需要编辑相应的文件AND modern.exe.文件的版本取决于你是否有标题图像,是否正确调整,等等.

例如,就我而言,我在安装程序脚本中有这些定义

!define MUI_HEADERIMAGE
!define MUI_HEADERIMAGE_RIGHT
Run Code Online (Sandbox Code Playgroud)

现在,当我查看\ Contrib\Modern UI 2\Interface.nsh时,我可以很容易地找出我需要编辑的文件.以下是我看到的内容:

!insertmacro MUI_DEFAULT MUI_UI "${NSISDIR}\Contrib\UIs\modern.exe"
!insertmacro MUI_DEFAULT MUI_UI_HEADERIMAGE "${NSISDIR}\Contrib\UIs\modern_headerbmp.exe"
!insertmacro MUI_DEFAULT MUI_UI_HEADERIMAGE_RIGHT "${NSISDIR}\Contrib\UIs\modern_headerbmpr.exe"
!insertmacro MUI_DEFAULT MUI_ICON "${NSISDIR}\Contrib\Graphics\Icons\modern-install.ico"
!insertmacro MUI_DEFAULT MUI_UNICON "${NSISDIR}\Contrib\Graphics\Icons\modern-uninstall.ico"
!insertmacro MUI_DEFAULT MUI_BGCOLOR "FFFFFF"
Run Code Online (Sandbox Code Playgroud)

由于我使用的是MUI_HEADERIMAGE_RIGHT,因此我将编辑modern_headerbmpr.exe文件.

现在,打开Resource Hacker并加载要编辑的文件.Resource Hacker有一个GUI,因此当您逐步浏览对话框中的每个对话框和每个控件时,您可以在按下"重新编译"后看到GUI更改方.这部分非常简单.单步执行所有对话框(为什么不)并编辑控件和大小,包括主安装程序的大小.在这个文件中,只有一个,所以你还需要打开modern.exe,它包含进入安装程序页面的子控件.再次,逐步执行所有对话框并更改所有大小,以便每个控件看起来都很好.编译,并将文件保存回此文件夹.

加分:对于测试,只需覆盖原始文件即可.你做了备份,对吧?对于部署,请为您编辑的每个文件命名新文件,例如"modern-wide.exe".之后,我们可以通过一点魔力在这些之间动态切换.

重新编译安装程序,现在您应该看到一个新的安装程序.

如果不这样做,请检查您实际上是否在ANSI与UNICODE文件夹中,否则您的更改将无效.

但是,某些屏幕会动态添加控件.例如,请查看\ Contrib\Modern UI 2\Pages\Welcome.nsh.

此文件在代码中添加标题标签和欢迎文本,而不是通过exe文件.唉,我知道!所以找到宏:

!macro MUI_FUNCTION_WELCOMEPAGE PRE LEAVE
Run Code Online (Sandbox Code Playgroud)

这些代码行:

${NSD_CreateBitmap} 0u 0u 109u 193u ""
...
${NSD_CreateLabel} 120u 10u 195u ${MUI_WELCOMEPAGE_TITLE_HEIGHT}u "${MUI_WELCOMEPAGE_TITLE}"
...
${NSD_CreateLabel} 120u ${MUI_WELCOMEPAGE_TEXT_TOP}u 195u 130u "${MUI_WELCOMEPAGE_TEXT}"
Run Code Online (Sandbox Code Playgroud)

如您所见,这里的单位是XY WIDTH HEIGHT,所以现在您可以修改这些控件.当然,如果您不使用欢迎页面,请不要打扰.但您可能需要以这种方式编辑不适合您的页面.

您可以覆盖原始文件,或者再次保存文件,并在文件名后附加"-wide".

现在,你基本完成了!

现在,为了让这个更容易切换,我会假设你保存:

welcome.nsh as welcome-wide.nsh
modern.exe as modern-wide.exe 
and let's say modern_headerbmpr.exe as modern_headerbmpr-wide.exe
Run Code Online (Sandbox Code Playgroud)

现在,在你的安装程序中,添加这个!定义BEFORE包括MUI2.nsh:

!define MUI_ALTERNATE_SIZE_EXT "-wide" 
Run Code Online (Sandbox Code Playgroud)

在interface.nsh中,将代码更改为:

!ifdef MUI_ALTERNATE_SIZE_EXT
    !insertmacro MUI_DEFAULT MUI_UI "${NSISDIR}\Contrib\UIs\modern${MUI_ALTERNATE_SIZE_EXT}.exe"
    !insertmacro MUI_DEFAULT MUI_UI_HEADERIMAGE "${NSISDIR}\Contrib\UIs\modern_headerbmp.exe"
    !insertmacro MUI_DEFAULT MUI_UI_HEADERIMAGE_RIGHT "${NSISDIR}\Contrib\UIs\modern_headerbmpr${MUI_ALTERNATE_SIZE_EXT}.exe"
    !insertmacro MUI_DEFAULT MUI_ICON "${NSISDIR}\Contrib\Graphics\Icons\modern-install.ico"
    !insertmacro MUI_DEFAULT MUI_UNICON "${NSISDIR}\Contrib\Graphics\Icons\modern-uninstall.ico"
    !insertmacro MUI_DEFAULT MUI_BGCOLOR "FFFFFF"
!else
    !insertmacro MUI_DEFAULT MUI_UI "${NSISDIR}\Contrib\UIs\modern.exe"
    !insertmacro MUI_DEFAULT MUI_UI_HEADERIMAGE "${NSISDIR}\Contrib\UIs\modern_headerbmp.exe"
    !insertmacro MUI_DEFAULT MUI_UI_HEADERIMAGE_RIGHT "${NSISDIR}\Contrib\UIs\modern_headerbmpr.exe"
    !insertmacro MUI_DEFAULT MUI_ICON "${NSISDIR}\Contrib\Graphics\Icons\modern-install.ico"
    !insertmacro MUI_DEFAULT MUI_UNICON "${NSISDIR}\Contrib\Graphics\Icons\modern-uninstall.ico"
    !insertmacro MUI_DEFAULT MUI_BGCOLOR "FFFFFF"
!endif
Run Code Online (Sandbox Code Playgroud)

当您将MUI_ALTERNATE_SIZE_EXT定义为"-wide"时,这实际上会将您的安装程序从常规切换到"-wide".请注意我是如何将$ {MUI_ALTERNATE_SIZE_EXT}直接添加到我更改的文件的文件名包含中的,当然您应该为您在开始时更改的文件执行此操作.

现在,您还需要在MUI2.NSH文件中执行此操作,如下所示:

!ifdef MUI_ALTERNATE_SIZE_EXT
    !include "Pages\Components.nsh"
    !include "Pages\Directory.nsh"
    !include "Pages\Finish.nsh"
    !include "Pages\InstallFiles.nsh"
    !include "Pages\License.nsh"
    !include "Pages\StartMenu.nsh"
    !include "Pages\UninstallConfirm.nsh"
    !include "Pages\Welcome${MUI_ALTERNATE_SIZE_EXT}.nsh"
!else
    !include "Pages\Components.nsh"
    !include "Pages\Directory.nsh"
    !include "Pages\Finish.nsh"
    !include "Pages\InstallFiles.nsh"
    !include "Pages\License.nsh"
    !include "Pages\StartMenu.nsh"
    !include "Pages\UninstallConfirm.nsh"
    !include "Pages\Welcome.nsh"
!endif
Run Code Online (Sandbox Code Playgroud)

在编辑更多文件时,只需将您创建的每个新UI的版本保存在单独的文件名中,现在只需使用一个定义即可切换安装程序的UI样式.您可以根据需要命名文件,并将此方案扩展到可能遇到麻烦的其他区域.

这样做并不是一件容易的事,但可以做到.