调整 MUI2 的组件大小

Adjust component size for MUI2

实际上,我正在尝试更改以下页面的 MUI2 组件的组件大小: !insertmacro MUI_PAGE_LICENSE !insertmacro MUI_PAGE_COMPONENTS !insertmacro MUI_PAGE_DIRECTORY !insertmacro MUI_PAGE_INSTFILES !insertmacro MUI_PAGE_FINISH

我还添加了自定义函数来更改每个 window 的大小,使用 nsResize 插件。现在我遇到的问题是组件放错了位置,而且宽度和高度都太小了。

我进行了搜索,确实为我的问题找到了一些想法。但出于几个个人原因,我不想使用 resourcehacker 来创建 UI 新的。我看到我可以使用系统插件来进行调整,但是信息源让我不知所措。

然后我尝试自己执行它但失败了。 我的实际解决方案是:

Function .myGuiInt
  System::Call "user32::GetClientRect(i #32770 , i r1)"
  System::Call "user32::SetWindowPos(i 1000, i, i, i 15000, i, i)"
  ....
FunctionEnd

我试图更改设置许可证的文本框的大小。 但是我没有任何效果,我怎样才能调用我可以影响 UI?

组件页面的简单解决方案是!defineMUI_COMPONENTSPAGE_SMALLDESCMUI_COMPONENTSPAGE_NODESC,这将使组件列表更大。

如果这还不够大,那么绝对最好的解决方案是创建您自己的 UI。您将不得不使用 Resource Hacker 或其他一些 .EXE 编辑器来执行此操作,但这是一次性操作,您不必重新分发编辑器,如果其他人只需要生成的 UI 文件和您的 .NSI还需要编译你的安装程序。获取 ...NSIS\Contrib\UIs\modern.exe 并根据您的需要对其进行编辑,然后使用 MUI_UI(或 ChangeUI 用于经典安装程序)应用它。

这样做的好处是您将使用 dialog units 而不是像素,并且也不需要编程技能。

最后的选择是在 运行 时间进行。这意味着您大部分时间都将以像素为单位工作,因此您不应该真正硬编码任何尺寸。要使用系统插件,您必须熟悉 Win32 编程。了解 C/C++ 或其他一些低级编程语言也有帮助。

!include MUI2.nsh
!insertmacro MUI_PAGE_WELCOME
!define MUI_COMPONENTSPAGE_NODESC
!define MUI_PAGE_CUSTOMFUNCTION_SHOW fullsize_tweak_components_page
!insertmacro MUI_PAGE_COMPONENTS
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_LANGUAGE "English"

!define /ifndef SWP_NOZORDER 4
!define /ifndef SWP_NOACTIVATE 0x10
Function fullsize_tweak_components_page
System::Call 'USER32::GetClientRect(p $mui.ComponentsPage, @ r0)' ; Get the size of the inner dialog
System::Call '*[=10=](i,i,i.r3,i.r4)' ; Extract the right and bottom members from RECT
System::Call 'USER32::SetWindowPos(p $mui.ComponentsPage.Components, p 0, i 0, i 0, i , i , i ${SWP_NOZORDER}|${SWP_NOACTIVATE})' ; Resize the components list
FunctionEnd