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

Показать сообщение отдельно
MKN MKN вне форума

Ветеран


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

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


Возвращаясь к имитации метро фейса...
При использовании WndProc.dll наблюдается такой не приятный момент. При быстром наведении курсора, то на одно изображение, то на другое - оба изображения могут выделиться (замениться на другое изображение) одновременно...
И ещё про курсор-ладошку... При перемещении курсора вне изображений , курсор очень быстро, но глазом заметно, изменяется-мельтешит, превращаясь из стрелки в ладошку и обратно...

Как бы преодолеть эти неприятные мелочи ? Код такой (дока к плагину не нашёл, может что не так и делаю... ) :
Пример кода

Код: Выделить весь код
!include MUI2.nsh
!include LogicLib.nsh
!insertmacro MUI_LANGUAGE Russian
OutFile ClickPict_WndProc.exe

Var Dialog
Var Image
Var Image2

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  ; навели курсор
System::Call USER32::LoadCursor(i,i32649)i.s
System::Call USER32::SetCursor(is)
${If} $2 = ${WM_NCHITTEST}
${NSD_SetImage} $Image '$PLUGINSDIR\Vinni2.bmp' $1
${EndIf}
FunctionEnd

Function ImgeSubProc2
System::Call USER32::LoadCursor(i,i32649)i.s
System::Call USER32::SetCursor(is)
${If} $2 = ${WM_NCHITTEST}
${NSD_SetImage} $Image2 '$PLUGINSDIR\Vinni2.bmp' $1
${EndIf}
FunctionEnd

Function MainWndSubProc  
${If} $2 = ${WM_NCHITTEST}
${NSD_SetImage} $Image '$PLUGINSDIR\Vinni.bmp' $1
${NSD_SetImage} $Image2 '$PLUGINSDIR\Vinni.bmp' $1
${EndIf}
FunctionEnd

Function Click1
MessageBox MB_OK "Click1"
FunctionEnd

Function Click2
MessageBox MB_OK "Click2"
FunctionEnd

Section
SectionEnd

Последний раз редактировалось MKN, 27-05-2020 в 16:17.


Отправлено: 18:17, 19-08-2015 | #1774