Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Показать сообщение отдельно

Аватара для K.A.V.

Ленивый кусок мяса


Contributor


Сообщения: 1986
Благодарности: 723

Профиль | Сайт | Отправить PM | Цитировать


Скрытый текст
Код: Выделить весь код
!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

-------
[Справочник по командам Windows] -- [Справочник по NSIS] -- [SFX Creator - для создания SFX архивов]

Это сообщение посчитали полезным следующие участники:

Отправлено: 15:51, 20-08-2015 | #1775