使用 NSIS,有没有办法在使用 nsWindows(子对话框)时添加 ListView?
Using NSIS, Is there any way to add a ListView while using nsWindows (Child Dialog)?
感谢阅读我的文章。祝你万事如意:)
我正在使用 NSIS,并且我创建了一个自定义页面来创建一个按钮。 (使用 nsDialog)
单击该按钮时,将使用 nswindows 插件创建第二个对话框,并在其中实现搜索功能。我无法添加列,因为我使用的是列表框。只能通过 ListView 添加列,而 ${LSW_*} 命令只能添加 ListBox。有没有办法添加列?
我将添加我想要实现的图像。谢谢。
Var hwindow3
Var hCtl_test_ListBox1
Function MyTestListBox
${NSW_CreateWindow} $hwindow3 "TEst" 1018
${NSW_SetWindowSize} $hwindow3 400 300
${NSW_CenterWindow} $hwindow3 $hwndparent
${NSW_OnBack} OnBack3
${NSW_CreateListBox} 7u 59u 193u 91u ""
Pop $hCtl_testserchSchool_ListBox1
; i want ListView T_T
${NSW_Show}
Create_End:
ShowWindow $hwindow3 ${SW_SHOW}
FunctionEnd
enter image description here
ListView 是最复杂的 Windows 常用控件,不幸的是 NSIS 对它的支持不是很好。
您最好的选择是使用 Wiki 中的 3rd-party header file。
!include CommCtrl.nsh
var lv
...
nsWindows::CreateControl /NOUNLOAD ${WC_LISTVIEW} ${__NSD_ListView_STYLE} ${__NSD_ListView_EXSTYLE} 3u 3u 100u 100u ""
Pop $lv
${NSD_LV_InsertColumn} $lv 0 100 "column 0"
${NSD_LV_InsertColumn} $lv 1 70 "column 1"
${NSD_LV_InsertItem} $lv 0 'Item 0'
${NSD_LV_SetItemText} $lv 0 1 'Subitem 0_1'
阅读文本
!define /IfNDef LVM_GETITEMCOUNT 0x1004
!define /IfNDef LVM_GETITEMTEXTA 0x102D
!define /IfNDef LVM_GETITEMTEXTW 0x1073
!if "${NSIS_CHAR_SIZE}" > 1
!define /ReDef LVM_GETITEMTEXT ${LVM_GETITEMTEXTW}
!else
!define /ReDef LVM_GETITEMTEXT ${LVM_GETITEMTEXTA}
!endif
var lv
var item
var subitem
StrCpy $item 0
StrCpy $subitem 1
System::Call '*(&t${NSIS_MAX_STRLEN})p.r3'
System::Call "*(i, i, i, i, i, p, i, i, i) p (0, 0, $subitem, 0, 0, r3, ${NSIS_MAX_STRLEN}) .r1"
System::Call "User32::SendMessage(p, i, p, p) p ($lv, ${LVM_GETITEMTEXT}, $item, r1)"
System::Call "*(&t${NSIS_MAX_STRLEN} .r4)"
System::Free
System::Free
MessageBox mb_ok
感谢阅读我的文章。祝你万事如意:)
我正在使用 NSIS,并且我创建了一个自定义页面来创建一个按钮。 (使用 nsDialog) 单击该按钮时,将使用 nswindows 插件创建第二个对话框,并在其中实现搜索功能。我无法添加列,因为我使用的是列表框。只能通过 ListView 添加列,而 ${LSW_*} 命令只能添加 ListBox。有没有办法添加列? 我将添加我想要实现的图像。谢谢。
Var hwindow3
Var hCtl_test_ListBox1
Function MyTestListBox
${NSW_CreateWindow} $hwindow3 "TEst" 1018
${NSW_SetWindowSize} $hwindow3 400 300
${NSW_CenterWindow} $hwindow3 $hwndparent
${NSW_OnBack} OnBack3
${NSW_CreateListBox} 7u 59u 193u 91u ""
Pop $hCtl_testserchSchool_ListBox1
; i want ListView T_T
${NSW_Show}
Create_End:
ShowWindow $hwindow3 ${SW_SHOW}
FunctionEnd
enter image description here
ListView 是最复杂的 Windows 常用控件,不幸的是 NSIS 对它的支持不是很好。
您最好的选择是使用 Wiki 中的 3rd-party header file。
!include CommCtrl.nsh
var lv
...
nsWindows::CreateControl /NOUNLOAD ${WC_LISTVIEW} ${__NSD_ListView_STYLE} ${__NSD_ListView_EXSTYLE} 3u 3u 100u 100u ""
Pop $lv
${NSD_LV_InsertColumn} $lv 0 100 "column 0"
${NSD_LV_InsertColumn} $lv 1 70 "column 1"
${NSD_LV_InsertItem} $lv 0 'Item 0'
${NSD_LV_SetItemText} $lv 0 1 'Subitem 0_1'
阅读文本
!define /IfNDef LVM_GETITEMCOUNT 0x1004
!define /IfNDef LVM_GETITEMTEXTA 0x102D
!define /IfNDef LVM_GETITEMTEXTW 0x1073
!if "${NSIS_CHAR_SIZE}" > 1
!define /ReDef LVM_GETITEMTEXT ${LVM_GETITEMTEXTW}
!else
!define /ReDef LVM_GETITEMTEXT ${LVM_GETITEMTEXTA}
!endif
var lv
var item
var subitem
StrCpy $item 0
StrCpy $subitem 1
System::Call '*(&t${NSIS_MAX_STRLEN})p.r3'
System::Call "*(i, i, i, i, i, p, i, i, i) p (0, 0, $subitem, 0, 0, r3, ${NSIS_MAX_STRLEN}) .r1"
System::Call "User32::SendMessage(p, i, p, p) p ($lv, ${LVM_GETITEMTEXT}, $item, r1)"
System::Call "*(&t${NSIS_MAX_STRLEN} .r4)"
System::Free
System::Free
MessageBox mb_ok