MKN,
Кнопки для этого плагина нужно добавлять так-же как и для плагина ButtonEvent, через редактор ресурсов.
Проблем с колбеками не должно было быть и раньше - нужно всего лишь один раз понять их логику. В WinAPI вобще везде так - надо понять как это всё работает, иначе постоянно будут какие-то непонятки.
Вот примерчик для кнопки с NSutils:
Скрытый текст
Код:
![Выделить весь код](images/misc/selectcode.png)
RequestExecutionLevel user
!include "LogicLib.nsh"
!include "nsDialogs.nsh"
Page components "" OnComponentsShow OnComponentsLeave
Function .onInit
FunctionEnd
Section
SectionEnd
Var hComponentsButton
Function OnComponentsShow
System::Call 'user32::GetClientRect(i $HWNDPARENT,@r1)i.r2'
System::Call '*$1(i,i,i.r1,i.r2)'
IntOp $2 $2 - 80
System::Call 'user32::CreateWindowEx(i0,t"Button",\
t"ClickMe!",\
i${BS_PUSHBUTTON}|${WS_CHILD}|${WS_VISIBLE}|${WS_TABSTOP},\
i0,ir2,ir1,i80,\
i$HWNDPARENT,i0,ir0,i0)i.s'
Pop $hComponentsButton
CreateFont $0 '$(^Font)' '$(^FontSize)'
SendMessage $hComponentsButton ${WM_SETFONT} $0 0
System::Call 'user32::SetWindowPos(i $hComponentsButton,i0, i0,i0,i0,i0, i3)'
GetFunctionAddress $0 OnComponentsButtonClicked
NSutils::StartReceivingClicks $HWNDPARENT $0
FunctionEnd
Function OnComponentsButtonClicked
Pop $1
Pop $2
${If} $1 = $hComponentsButton
MessageBox MB_OK "Clicked$\nHWND $1$\nID $2"
${EndIf}
FunctionEnd
Function OnComponentsLeave
NSutils::StopReceivingClicks $HWNDPARENT
FunctionEnd
Кнопка создаётся в рантайме, посему криво (про это я объяснял с
соседней теме по AutoIt)
Лучше кнопки добавлять в редакторе ресурсов. Их можно сделать изначально невидимыми (без атрибута WS_VISIBLE) и делать видимыми (и даже перемещать/менять размер) по мере необходимости.
Если хочется без проблем добавлять всякие штуки налету то придётся предварительно подправить диалоги (их порядок и свойства).