例子:使用ComboBoxEx类创建硬盘分区下拉列表
优质
小牛编辑
135浏览
2023-12-01
引用 ComboBoxEx.nsi 的内容:
!include "MUI2.nsh" !include "UsefulLib.nsh" /* User defines start */ !define __NSD_ComboBoxEx_CLASS ComboBoxEx32 !define __NSD_ComboBoxEx_STYLE ${DEFAULT_STYLES}|${WS_TABSTOP}|${CBS_DROPDOWN} !define __NSD_ComboBoxEx_EXSTYLE 0 !define __NSD_DropListEx_CLASS ComboBoxEx32 !define __NSD_DropListEx_STYLE ${DEFAULT_STYLES}|${WS_TABSTOP}|${CBS_DROPDOWNLIST} !define __NSD_DropListEx_EXSTYLE 0 !insertmacro __NSD_DefineControl ComboBoxEx !insertmacro __NSD_DefineControl DropListEx ${define} DRIVE_UNKNOWN 0 ${define} DRIVE_NO_ROOT_DIR 1 ${define} DRIVE_REMOVABLE 2 ${define} DRIVE_FIXED 3 ${define} DRIVE_REMOTE 4 ${define} DRIVE_CDROM 5 ${define} DRIVE_RAMDISK 6 ${define} ILC_COLOR 0 ${define} ILC_MASK 1 ${define} ILC_COLOR4 4 ${define} ILC_COLOR8 8 ${define} ILC_COLOR16 16 ${define} ILC_COLOR24 24 ${define} ILC_COLOR32 32 ${define} CBEM_INSERTITEM 0x00000401 ${define} CBEM_SETIMAGELIST 0x00000402 ${define} CBEM_GETIMAGELIST 0x00000403 ${define} CBEM_GETITEM 0x00000404 ${define} CBEM_SETITEM 0x00000405 ${define} CBEM_DELETEITEM ${CB_DELETESTRING} ${define} CBEM_GETCOMBOCONTROL 0x00000406 ${define} CBEM_GETEDITCONTROL 0x00000407 ${define} CBEM_GETEXTENDEDSTYLE 0x00000409 ${define} CBEM_HASEDITCHANGED 0x0000040A ${define} CBEM_SETEXTENDEDSTYLE 0x0000040E ${define} CBEIF_TEXT 0x00000001 ${define} CBEIF_IMAGE 0x00000002 ${define} CBEIF_SELECTEDIMAGE 0x00000004 ${define} CBEIF_OVERLAY 0x00000008 ${define} CBEIF_INDENT 0x00000010 ${define} CBEIF_LPARAM 0x00000020 ${define} CBEIF_DI_SETITEM 0x10000000 /* User defines end */ Name "ComboBoxEx" OutFile ComboBoxEx.exe InstallDir $TEMP Page custom CreatePage !insertmacro MUI_PAGE_DIRECTORY !insertmacro MUI_LANGUAGE "English" Function CreatePage !insertmacro MUI_HEADER_TEXT "ComboBoxEx control" "ComboBoxEx control created using nsDialogs plugin" nsDialogs::Create 1018 Pop $0 ${If} $0 == error Abort ${EndIf} ${NSD_CreateLabel} 0u 0u 300u 9u "使用 ComboBoxEx32 类创建的带图标下拉列表:" Pop $0 ${NSD_CreateLabel} 0u 70u 300u 9u "使用 ComboBox 类创建的纯文字下拉列表:" Pop $0 ${NSD_CreateDropListEx} 0u 15u 300u 140u "DropListEx" Pop $1 ${NSD_CreateDropList} 0u 85u 300u 140u "DropList" Pop $2 System::Alloc 1024 Pop $R1 System::Call 'kernel32::GetLogicalDriveStrings(i1024,iR1)' OK: System::Call 'kernel32::lstrlen(t)i(iR1).R2' IntCmp $R2 0 Exit System::Call 'kernel32::GetDriveType(t)i(iR1).R3' StrCmp $R3 ${DRIVE_FIXED} 0 Next System::Call 'kernel32::GetDiskFreeSpaceEx(t,*l,*l,*l)i(iR1,.R3,.R4,.R5)' System::Call '*$R1(&t1024.R6)' System::Call 'kernel32::GetVolumeInformation(tR6,t.R7,i${MAX_PATH},*i,*i,*i,t.R8,i${MAX_PATH})' System::Call 'shlwapi::StrTrim(tR6R6,t"\")' System::Call 'shlwapi::StrFormatByteSize64(lR3,t.R3,t${MAX_PATH})' System::Call 'shlwapi::StrFormatByteSize64(lR4,t.R4,t${MAX_PATH})' ${IfThen} $R7 == '' ${|} StrCpy $R7 "本地磁盘" ${|} System::Call '*(i,i,t,i,i,i,i,i,i)i(${CBEIF_TEXT}|${CBEIF_IMAGE}|${CBEIF_SELECTEDIMAGE},0,"$R7 ($R6) ($R8) 可用空间:$R3",${NSIS_MAX_STRLEN},0,0,,,).r0' SendMessage $1 ${CBEM_INSERTITEM} 0 $0 ${NSD_CB_AddString} $2 '$R7 ($R6) ($R8) 可用空间:$R3' Next: IntOp $R1 $R1 + $R2 IntOp $R1 $R1 + 1 Goto OK Exit: System::Free $R1 System::Call 'kernel32::LoadLibrary(t"shell32.dll")i.r0' System::Call 'user32::LoadImage(i,t,i,i,i,i)i(r0,i9,${IMAGE_ICON},16,16,${LR_SHARED}).R0' System::Call 'kernel32::FreeLibrary(ir0)' System::Call 'comctl32::ImageList_Create(i16,i16,i${ILC_MASK}|${ILC_COLOR32},i0,i0)i.r0' System::Call 'comctl32::ImageList_AddIcon(ir0,iR0)' System::Call 'user32::DestroyIcon(iR0)' SendMessage $1 ${CBEM_SETIMAGELIST} 0 $0 nsDialogs::Show System::Call 'comctl32::ImageList_Destroy(ir0)' FunctionEnd Section -Main SectionEnd