Скрытый текст
Код:
!addplugindir "."
!include MUI2.nsh
!include LogicLib.nsh
!insertmacro MUI_LANGUAGE Russian
OutFile ClickPict_WndProc.exe
Var Dialog
Var Image
Var Image2
var SetImage1
var SetImage2
Page custom nsDialogsPage
Function .onInit
InitPluginsDir
File /ONAME=$PLUGINSDIR\Vinni.bmp Vinni.bmp
File /ONAME=$PLUGINSDIR\Vinni2.bmp Vinni2.bmp
FunctionEnd
Function nsDialogsPage
nsDialogs::Create /NOUNLOAD 1018
Pop $Dialog
GetFunctionAddress $0 MainWndSubProc
WndProc::onCallback /r=1 $Dialog $0
${NSd_CreateBitmap} 0 0 100% 100% ''
Pop $Image
${NSD_SetImage} $Image '$PLUGINSDIR\Vinni.bmp' $1
GetFunctionAddress $0 ImgeSubProc
WndProc::onCallback /r=1 $Image $0
${NSD_AddStyle} $Image ${SS_NOTIFY}
${NSD_OnClick} $Image Click1
${NSd_CreateBitmap} 90 0 100% 100% ''
Pop $Image2
${NSD_SetImage} $Image2 '$PLUGINSDIR\Vinni.bmp' $1
GetFunctionAddress $0 ImgeSubProc2
WndProc::onCallback /r=1 $Image2 $0
${NSD_AddStyle} $Image2 ${SS_NOTIFY}
${NSD_OnClick} $Image2 Click2
nsDialogs::show
FunctionEnd
; Сообщение WM_NCHITTEST отправляется в окно тогда, когда перемещается курсор, или когда кнопка мыши нажимается или отпускается.
; Если мышь не захвачена, сообщение отправляется в окно под курсором. В противном случае, сообщение отправляется в окно, которое захватило мышь.
; Окно получает это сообщение через посредство своей функции WindowProc.
Function ImgeSubProc ; навели курсор
${If} $2 = ${WM_MOUSEMOVE}
System::Call USER32::LoadCursor(i,i32649)i.s
System::Call USER32::SetCursor(is)
${NSD_SetImage} $Image '$PLUGINSDIR\Vinni2.bmp' $1
StrCpy $SetImage1 1
${EndIf}
FunctionEnd
Function ImgeSubProc2
${If} $2 = ${WM_MOUSEMOVE}
System::Call USER32::LoadCursor(i,i32649)i.s
System::Call USER32::SetCursor(is)
${NSD_SetImage} $Image2 '$PLUGINSDIR\Vinni2.bmp' $1
StrCpy $SetImage2 1
${EndIf}
FunctionEnd
Function MainWndSubProc
${If} $2 = ${WM_MOUSEMOVE}
${If} $SetImage1 = 1
${NSD_SetImage} $Image '$PLUGINSDIR\Vinni.bmp' $1
StrCpy $SetImage1 0
${EndIf}
${If} $SetImage2 = 1
${NSD_SetImage} $Image2 '$PLUGINSDIR\Vinni.bmp' $1
StrCpy $SetImage2 0
${EndIf}
${EndIf}
FunctionEnd
Function Click1
MessageBox MB_OK "Click1"
FunctionEnd
Function Click2
MessageBox MB_OK "Click2"
FunctionEnd
Section
SectionEnd
Цитата MKN:
При быстром наведении курсора, то на одно изображение, то на другое - оба изображения могут выделиться (замениться на другое изображение) »
|
У себя такого не заметил, единственно что заметил - изображения выделяются, если навести курсор сначала на одно изображение, затем переместить курсор на белую область выше, а затем на второе изображение. Здесь, возможно, поможет добавление того куска кода по определению региона элемента с изображением
Цитата MKN:
При перемещении курсора вне изображений , курсор очень быстро, но глазом заметно, изменяется-мельтешит, превращаясь из стрелки в ладошку и обратно »
|
Ну так, смотри внимательней на свой код, у тебя команда установки курсора находится перед проверкой на перемещение мыши
В код добавил 2 переменные
$SetImage1 и
$SetImage2, которые используются для того, чтобы постоянно не присваивать изображения элементам (происходит быстрое мерцание из-за постоянного перемещения мыши и присваивания изображений) в функции
MainWndSubProc, возможно, можно обойтись без переменных и как-то поиграться с
WM_SETREDRAW - оставлю это тебе
p.s.
Насчет своих изображений кнопкам, есть же плагин
SkinnedButton plug-in, если у тебя будут кнопки одного типа - думаю, лучше этим плагом воспользоваться
Кстати, вот можешь скачать архивчик с
GitHub, там примеры своего интерфейса с парой интересных плюшек + свои мессаджбоксы со своим стилем, я сам в этом не разбирался, посмотрел мельком гугля инфу по твоему плагу WndProc