Jump to content

Move child GUI within GUI issue


UEZ
 Share

Recommended Posts

Following script shows a parent GUI with a child GUI initialized as MDICHILD.

#include <Constants.au3>
#include <GUIConstantsEx.au3>
#include <GuiReBar.au3>
#include <GuiScrollBars.au3>
#include <GuiToolbar.au3>
#include <ScreenCapture.au3>
#include <ScrollBarConstants.au3>
#include <WindowsConstants.au3>

_GDIPlus_Startup()
Global Enum $idNew = 1000, $idOpen, $idSave, $idHelper
Global Const $iImageW = @DesktopWidth, $iImageH = @DesktopHeight
Global Const $hBMP_ScreenCapture = _ScreenCapture_Capture("", 0, 0, $iImageW, $iImageH, False)
Global Const $hBitmap = _GDIPlus_BitmapCreateFromHBITMAP($hBMP_ScreenCapture)

Sleep(50)
Global Const $iW = 1500, $iH = 700, $SC_DRAGMOVE = 0xF012

Global Const $hGUI = GUICreate("Move child GUI within GUI", $iW, $iH)
Global Const $hToolbar = _GUICtrlToolbar_Create($hGUI)
Global Const $hReBar = _GUICtrlRebar_Create($hGUI, BitOR($CCS_TOP, $RBS_VARHEIGHT, $RBS_AUTOSIZE, $RBS_BANDBORDERS))

Global Const $height_delta = 37
Global Const $idPic = GUICtrlCreatePic("", 0, $height_delta + 2, $iW, $iH)
Global $hBitmap_tmp, $hHBitmap_tmp
$hBitmap_tmp = _GDIPlus_BitmapCreateFromScan0($iW, $iH)
Global $hGfx_Context = _GDIPlus_ImageGetGraphicsContext($hBitmap_tmp)

_GUICtrlToolbar_AddBitmap($hToolbar, 1, -1, $IDB_STD_LARGE_COLOR)

_GUICtrlToolbar_AddButton($hToolbar, $idNew, $STD_FILENEW)
_GUICtrlToolbar_AddButton($hToolbar, $idOpen, $STD_FILEOPEN)
_GUICtrlToolbar_AddButton($hToolbar, $idSave, $STD_FILESAVE)
_GUICtrlToolbar_AddButtonSep($hToolbar)
_GUICtrlToolbar_AddButton($hToolbar, $idHelper, $STD_HELP)

_GUICtrlRebar_AddToolBarBand($hReBar, $hToolbar, "", 0)

Global Const $iVSscroll = _WinAPI_GetSystemMetrics(2)
Global Const $iHSscroll = _WinAPI_GetSystemMetrics(3)
Global Const $iYCaption = _WinAPI_GetSystemMetrics(4)
Global Const $iYFixedFrame = _WinAPI_GetSystemMetrics(8)
Global Const $iXFixedFrame = _WinAPI_GetSystemMetrics(7)

Global Const $iMetricsSumX = $iVSscroll  + $iXFixedFrame * 2
Global Const $iMetricsSumY = $iHSscroll +  $iYCaption + $iYFixedFrame

_GUIScrollBars_Init($hGUI)
_GUIScrollBars_SetScrollInfoMin($hGUI, $SB_HORZ, 0)
_GUIScrollBars_SetScrollInfoMax($hGUI, $SB_HORZ, $iImageW - $iW + 61 + $iMetricsSumX)
_GUIScrollBars_SetScrollInfoMin($hGUI, $SB_VERT, 0)
_GUIScrollBars_SetScrollInfoMax($hGUI, $SB_VERT, $iImageH - $iH + $iMetricsSumY + $height_delta - 1)

GUISetState(@SW_SHOW, $hGUI)

Global Const $STM_SETIMAGE = 0x0172
_WinAPI_DeleteObject(GUICtrlSendMsg($idPic, $STM_SETIMAGE, $IMAGE_BITMAP, $hBMP_ScreenCapture))

Global $IE_offset_x = 0, $IE_offset_y = 0

DrawImage($hGfx_Context, $hBitmap, $IE_offset_x, $IE_offset_y, $iW, $iH)

GUIRegisterMsg($WM_HSCROLL, "WM_HSCROLL_IE")
GUIRegisterMsg($WM_VSCROLL, "WM_VSCROLL_IE")

Global $iPosX_Crop = 0, $iPosY_Crop = 0, $iW_crop = 200, $iH_crop = 200, $bMove_Crop = True
Global $hGUI_IE_Crop = GUICreate("", $iW_crop, $iH_crop, $iPosX_Crop, $iPosY_Crop)
GUISetStyle(BitOR($WS_BORDER, $WS_POPUP), $WS_EX_MDICHILD)
_WinAPI_SetParent($hGUI_IE_Crop, $hGUI)
WinSetTrans($hGUI_IE_Crop, "", 0xA0)
Global $iLable_CropMove = GUICtrlCreateLabel("", 0, 0, $iW_crop, $iH_crop, -1, $GUI_WS_EX_PARENTDRAG)
GUISetState(@SW_SHOW, $hGUI_IE_Crop)

GUIRegisterMsg($WM_MOVE, "WM_MOVE_IE_GUI_Crop")
;~ GUIRegisterMsg($WM_LBUTTONDOWN, "_WM_LBUTTONDOWN")

Do
    Switch GUIGetMsg()
        Case $GUI_EVENT_CLOSE
            ExitLoop
    EndSwitch
Until False

GUIRegisterMsg($WM_HSCROLL, "")
GUIRegisterMsg($WM_VSCROLL, "")
GUIRegisterMsg($WM_MOVE, "")
GUIRegisterMsg($WM_LBUTTONDOWN, "")

_WinAPI_DeleteObject($hBMP_ScreenCapture)
_GDIPlus_BitmapDispose($hBitmap_tmp)
_GDIPlus_BitmapDispose($hBitmap)
_GDIPlus_GraphicsDispose($hGfx_Context)
_GDIPlus_Shutdown()
Exit

Func WM_HSCROLL_IE($hWnd, $iMsg, $wParam, $lParam)
    #forceref $iMsg, $lParam
    Local $Min, $Max, $Page, $TrackPos

    ; Get all the horizontal scroll bar information
    Local $tSCROLLINFO_X = _GUIScrollBars_GetScrollInfoEx($hWnd, $SB_HORZ)
    $Min = DllStructGetData($tSCROLLINFO_X, "nMin")
    $Max = DllStructGetData($tSCROLLINFO_X, "nMax")
    $Page = DllStructGetData($tSCROLLINFO_X, "nPage")

    ; Save the position for comparison later on
    $IE_offset_x = DllStructGetData($tSCROLLINFO_X, "nPos")
    $TrackPos = DllStructGetData($tSCROLLINFO_X, "nTrackPos")
    #forceref $Min, $Max
    Local $nScrollCode = BitAND($wParam, 0x0000FFFF)
    Switch $nScrollCode

        Case $SB_LINELEFT ; user clicked left arrow
            DllStructSetData($tSCROLLINFO_X, "nPos", $IE_offset_x - 1)

        Case $SB_LINERIGHT ; user clicked right arrow
            DllStructSetData($tSCROLLINFO_X, "nPos", $IE_offset_x + 1)

        Case $SB_PAGELEFT ; user clicked the scroll bar shaft left of the scroll box
            DllStructSetData($tSCROLLINFO_X, "nPos", $IE_offset_x - $Page)

        Case $SB_PAGERIGHT ; user clicked the scroll bar shaft right of the scroll box
            DllStructSetData($tSCROLLINFO_X, "nPos", $IE_offset_x + $Page)

        Case $SB_THUMBTRACK ; user dragged the scroll box
            DllStructSetData($tSCROLLINFO_X, "nPos", $TrackPos)
    EndSwitch

    DllStructSetData($tSCROLLINFO_X, "fMask", $SIF_POS)
    _GUIScrollBars_SetScrollInfo($hWnd, $SB_HORZ, $tSCROLLINFO_X)

    $IE_offset_x = DllStructGetData($tSCROLLINFO_X, "nPos")

    DrawImage($hGfx_Context, $hBitmap, $IE_offset_x, $IE_offset_y, $iW, $iH)
    $hHBitmap_tmp = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hBitmap_tmp)
    _WinAPI_DeleteObject(GUICtrlSendMsg($idPic, $STM_SETIMAGE, $IMAGE_BITMAP, $hHBitmap_tmp))
    _WinAPI_DeleteObject($hHBitmap_tmp)

    $bMove_Crop = False
    ConsoleWrite($iPosX_Crop & ", " & $iPosY_Crop & " / " & $IE_offset_x & ", " & $IE_offset_y & @CRLF)
    WinMove($hGUI_IE_Crop, "", -$IE_offset_x + $iPosX_Crop, -$IE_offset_y + $iPosY_Crop)
;~  DllCall("user32.dll", "bool", "MoveWindow", "hwnd", $hGUI_IE_Crop, "int", -$IE_offset_x + $iPosX_Crop, "int", -$IE_offset_y + $iPosY_Crop, "int", $iW_crop, "int", $iH_crop, "bool", True)
    $bMove_Crop = True

    Return "GUI_RUNDEFMSG"
EndFunc   ;==>WM_HSCROLL_IE

Func WM_VSCROLL_IE($hWnd, $iMsg, $wParam, $lParam)
    #forceref $iMsg, $lParam

    Local $Min, $Max, $Page, $TrackPos

;~  ; Get all the horizontal scroll bar information
    Local $tSCROLLINFO_Y = _GUIScrollBars_GetScrollInfoEx($hWnd, $SB_VERT)
    $Min = DllStructGetData($tSCROLLINFO_Y, "nMin")
    $Max = DllStructGetData($tSCROLLINFO_Y, "nMax")
    $Page = DllStructGetData($tSCROLLINFO_Y, "nPage")
    ; Save the position for comparison later on
    $IE_offset_y = DllStructGetData($tSCROLLINFO_Y, "nPos")
    $TrackPos = DllStructGetData($tSCROLLINFO_Y, "nTrackPos")
    #forceref $Min, $Max
    Local $nScrollCode = BitAND($wParam, 0x0000FFFF)
    Switch $nScrollCode

        Case $SB_LINELEFT ; user clicked left arrow
            DllStructSetData($tSCROLLINFO_Y, "nPos", $IE_offset_y - 1)

        Case $SB_LINERIGHT ; user clicked right arrow
            DllStructSetData($tSCROLLINFO_Y, "nPos", $IE_offset_y + 1)

        Case $SB_PAGELEFT ; user clicked the scroll bar shaft left of the scroll box
            DllStructSetData($tSCROLLINFO_Y, "nPos", $IE_offset_y - $Page)

        Case $SB_PAGERIGHT ; user clicked the scroll bar shaft right of the scroll box
            DllStructSetData($tSCROLLINFO_Y, "nPos", $IE_offset_y + $Page)

        Case $SB_THUMBTRACK ; user dragged the scroll box
            DllStructSetData($tSCROLLINFO_Y, "nPos", $TrackPos)
    EndSwitch

    DllStructSetData($tSCROLLINFO_Y, "fMask", $SIF_POS)
    _GUIScrollBars_SetScrollInfo($hWnd, $SB_VERT, $tSCROLLINFO_Y)

    $IE_offset_y = DllStructGetData($tSCROLLINFO_Y, "nPos")

    DrawImage($hGfx_Context, $hBitmap, $IE_offset_x, $IE_offset_y, $iW, $iH)

    $bMove_Crop = False
    ConsoleWrite($iPosX_Crop & ", " & $iPosY_Crop & " / " & $IE_offset_x & ", " & $IE_offset_y & @CRLF)
    WinMove($hGUI_IE_Crop, "", -$IE_offset_x + $iPosX_Crop, -$IE_offset_y + $iPosY_Crop)
;~  DllCall("user32.dll", "bool", "MoveWindow", "hwnd", $hGUI_IE_Crop, "int", -$IE_offset_x + $iPosX_Crop, "int", -$IE_offset_y + $iPosY_Crop, "int", $iW_crop, "int", $iH_crop, "bool", True)
    $bMove_Crop = True

    Return "GUI_RUNDEFMSG"
EndFunc   ;==>WM_VSCROLL_IE

Func _WM_LBUTTONDOWN($hWnd, $iMsg, $wParam, $lParam)
    _SendMessage($hGUI_IE_Crop, $WM_SYSCOMMAND, $SC_DRAGMOVE, 0)
EndFunc   ;==>_WM_LBUTTONDOWN

Func WM_MOVE_IE_GUI_Crop($hWnd, $iMsg, $wParam, $lParam)
    #forceref $iMsg, $wParam
    If $hWnd = $hGUI_IE_Crop And $bMove_Crop Then
        $iPosX_Crop = _WinAPI_LoWord($lParam)
        $iPosY_Crop = _WinAPI_HiWord($lParam)
    EndIf
    Return "GUI_RUNDEFMSG"
EndFunc   ;==>WM_MOVE_IE_GUI_Crop

Func WM_SIZE_IE_GUI_Crop($hWnd, $iMsg, $wParam, $lParam)

    Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_SIZE_IE_GUI_Crop

Func DrawImage($hGfx_Context, $hBitmap, $IE_offset_x, $IE_offset_y, $iW, $iH)
    _GDIPlus_GraphicsDrawImageRectRect($hGfx_Context, $hBitmap, $IE_offset_x, $IE_offset_y, $iW, $iH, 0, 0, $iW, $iH)
    $hHBitmap_tmp = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hBitmap_tmp)
    _WinAPI_DeleteObject(GUICtrlSendMsg($idPic, $STM_SETIMAGE, $IMAGE_BITMAP, $hHBitmap_tmp))
    _WinAPI_DeleteObject($hHBitmap_tmp)
EndFunc

 

My problem: if you move the child window at left upper corner to another place and move either H or V scrollbar the child GUI will be moved properly. BUT if you have scrolled the scrollbars to the right bottom of the image and move the child GUI to that corner, too then the child GUI jumps if you click on one of the scrollbars.

Is there something that I didn't consider?

Please don't send me any personal message and ask for support! I will not reply!

Selection of finest graphical examples at Codepen.io

The own fart smells best!
Her 'sikim hıyar' diyene bir avuç tuz alıp koşma!
¯\_(ツ)_/¯  ٩(●̮̮̃•̃)۶ ٩(-̮̮̃-̃)۶ૐ

Link to comment
Share on other sites

I think I found what I didn't consider. As soon as you move any scrollbar you have to add the same value as scrollbar value otherwise it jumps back to current position minus scrollbar value x/y.

;coded by UEZ
;worked properly with Win8+
#include <Constants.au3>
#include <GUIConstantsEx.au3>
#include <GuiReBar.au3>
#include <GuiScrollBars.au3>
#include <GuiToolbar.au3>
#include <ScreenCapture.au3>
#include <ScrollBarConstants.au3>
#include <WindowsConstants.au3>

_GDIPlus_Startup()
Global Enum $idNew = 1000, $idOpen, $idSave, $idHelper
Global Const $iImageW = @DesktopWidth, $iImageH = @DesktopHeight
Global Const $hBMP_ScreenCapture = _ScreenCapture_Capture("", 0, 0, $iImageW - 1, $iImageH - 1, False)
Global Const $hBitmap = _GDIPlus_BitmapCreateFromHBITMAP($hBMP_ScreenCapture)
ConsoleWrite("Image dimension: " & _GDIPlus_ImageGetWidth($hBitmap) & " x " & _GDIPlus_ImageGetHeight($hBitmap) & @CRLF)
Sleep(50)
Global Const $iW = 1200, $iH = 600, $SC_DRAGMOVE = 0xF012

Global Const $hGUI = GUICreate("Move child GUI within GUI", $iW, $iH)
Global Const $hToolbar = _GUICtrlToolbar_Create($hGUI)
Global Const $hReBar = _GUICtrlRebar_Create($hGUI, BitOR($CCS_TOP, $RBS_VARHEIGHT, $RBS_AUTOSIZE, $RBS_BANDBORDERS))

Global Const $height_delta = 37
Global Const $idPic = GUICtrlCreatePic("", 0, $height_delta + 2, $iW, $iH)
Global $hBitmap_tmp, $hHBitmap_tmp
$hBitmap_tmp = _GDIPlus_BitmapCreateFromScan0($iW, $iH)
Global $hGfx_Context = _GDIPlus_ImageGetGraphicsContext($hBitmap_tmp)

_GUICtrlToolbar_AddBitmap($hToolbar, 1, -1, $IDB_STD_LARGE_COLOR)

_GUICtrlToolbar_AddButton($hToolbar, $idNew, $STD_FILENEW)
_GUICtrlToolbar_AddButton($hToolbar, $idOpen, $STD_FILEOPEN)
_GUICtrlToolbar_AddButton($hToolbar, $idSave, $STD_FILESAVE)
_GUICtrlToolbar_AddButtonSep($hToolbar)
_GUICtrlToolbar_AddButton($hToolbar, $idHelper, $STD_HELP)

_GUICtrlRebar_AddToolBarBand($hReBar, $hToolbar, "", 0)

Global Const $iVSscroll = _WinAPI_GetSystemMetrics(2)
Global Const $iHSscroll = _WinAPI_GetSystemMetrics(3)
Global Const $iYCaption = _WinAPI_GetSystemMetrics(4)
Global Const $iYFixedFrame = _WinAPI_GetSystemMetrics(8)
Global Const $iXFixedFrame = _WinAPI_GetSystemMetrics(7)

Global Const $iMetricsSumX = $iVSscroll  + $iXFixedFrame * 2
Global Const $iMetricsSumY = $iHSscroll +  $iYCaption + $iYFixedFrame

_GUIScrollBars_Init($hGUI)
_GUIScrollBars_SetScrollInfoMin($hGUI, $SB_HORZ, 0)
_GUIScrollBars_SetScrollInfoMax($hGUI, $SB_HORZ, $iImageW - $iW + 61 + $iMetricsSumX)
_GUIScrollBars_SetScrollInfoMin($hGUI, $SB_VERT, 0)
_GUIScrollBars_SetScrollInfoMax($hGUI, $SB_VERT, $iImageH - $iH + $iMetricsSumY + $height_delta - 1)

GUISetState(@SW_SHOW, $hGUI)

Global Const $STM_SETIMAGE = 0x0172
_WinAPI_DeleteObject(GUICtrlSendMsg($idPic, $STM_SETIMAGE, $IMAGE_BITMAP, $hBMP_ScreenCapture))

Global $IE_offset_x = 0, $IE_offset_y = 0

DrawImage($hGfx_Context, $hBitmap, $IE_offset_x, $IE_offset_y, $iW, $iH)

GUIRegisterMsg($WM_HSCROLL, "WM_HSCROLL_IE")
GUIRegisterMsg($WM_VSCROLL, "WM_VSCROLL_IE")

Global $iPosX_Crop = 0, $iPosY_Crop = 0, $iW_crop = 200, $iH_crop = 200, $bMove_Crop = True, $iDeltaX_Crop = 0, $iDeltaY_Crop = 0
Global $hGUI_IE_Crop = GUICreate("", $iW_crop, $iH_crop, $iPosX_Crop, $iPosY_Crop)
GUISetStyle(BitOR($WS_POPUP, $WS_SIZEBOX, $WS_CHILD, $WS_CLIPCHILDREN, $WS_VISIBLE), $WS_EX_MDICHILD)
_WinAPI_SetParent($hGUI_IE_Crop, $hGUI)
WinSetTrans($hGUI_IE_Crop, "", 0xA0)
Global $iLable_CropMove = GUICtrlCreateLabel("", 0, 0, $iW_crop, $iH_crop, -1, $GUI_WS_EX_PARENTDRAG)
GUICtrlSetBkColor(-1, 0x808080)
GUISetState(@SW_SHOW, $hGUI_IE_Crop)

GUIRegisterMsg($WM_MOVE, "WM_MOVE_IE_GUI_Crop")

Do
    Switch GUIGetMsg()
        Case $GUI_EVENT_CLOSE
            ExitLoop
    EndSwitch
Until False

GUIRegisterMsg($WM_HSCROLL, "")
GUIRegisterMsg($WM_VSCROLL, "")
GUIRegisterMsg($WM_MOVE, "")
GUIRegisterMsg($WM_LBUTTONDOWN, "")

_WinAPI_DeleteObject($hBMP_ScreenCapture)
_GDIPlus_BitmapDispose($hBitmap_tmp)
_GDIPlus_BitmapDispose($hBitmap)
_GDIPlus_GraphicsDispose($hGfx_Context)
_GDIPlus_Shutdown()
Exit

Func WM_HSCROLL_IE($hWnd, $iMsg, $wParam, $lParam)
    #forceref $iMsg, $lParam
    Local $Min, $Max, $Page, $TrackPos

    ; Get all the horizontal scroll bar information
    Local $tSCROLLINFO_X = _GUIScrollBars_GetScrollInfoEx($hWnd, $SB_HORZ)
    $Min = DllStructGetData($tSCROLLINFO_X, "nMin")
    $Max = DllStructGetData($tSCROLLINFO_X, "nMax")
    $Page = DllStructGetData($tSCROLLINFO_X, "nPage")

    ; Save the position for comparison later on
    $IE_offset_x = DllStructGetData($tSCROLLINFO_X, "nPos")
    $TrackPos = DllStructGetData($tSCROLLINFO_X, "nTrackPos")
    #forceref $Min, $Max
    Local $nScrollCode = BitAND($wParam, 0x0000FFFF)
    Switch $nScrollCode

        Case $SB_LINELEFT ; user clicked left arrow
            DllStructSetData($tSCROLLINFO_X, "nPos", $IE_offset_x - 1)

        Case $SB_LINERIGHT ; user clicked right arrow
            DllStructSetData($tSCROLLINFO_X, "nPos", $IE_offset_x + 1)

        Case $SB_PAGELEFT ; user clicked the scroll bar shaft left of the scroll box
            DllStructSetData($tSCROLLINFO_X, "nPos", $IE_offset_x - $Page)

        Case $SB_PAGERIGHT ; user clicked the scroll bar shaft right of the scroll box
            DllStructSetData($tSCROLLINFO_X, "nPos", $IE_offset_x + $Page)

        Case $SB_THUMBTRACK ; user dragged the scroll box
            DllStructSetData($tSCROLLINFO_X, "nPos", $TrackPos)
    EndSwitch

    DllStructSetData($tSCROLLINFO_X, "fMask", $SIF_POS)
    _GUIScrollBars_SetScrollInfo($hWnd, $SB_HORZ, $tSCROLLINFO_X)

    $IE_offset_x = DllStructGetData($tSCROLLINFO_X, "nPos")

    DrawImage($hGfx_Context, $hBitmap, $IE_offset_x, $IE_offset_y, $iW, $iH)
    $hHBitmap_tmp = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hBitmap_tmp)
    _WinAPI_DeleteObject(GUICtrlSendMsg($idPic, $STM_SETIMAGE, $IMAGE_BITMAP, $hHBitmap_tmp))
    _WinAPI_DeleteObject($hHBitmap_tmp)

    $bMove_Crop = False
    WinMove($hGUI_IE_Crop, "", -1 * $IE_offset_x + $iPosX_Crop + $iDeltaX_Crop, -1 * $IE_offset_y + $iPosY_Crop + $iDeltaY_Crop)
    $bMove_Crop = True

    Return "GUI_RUNDEFMSG"
EndFunc   ;==>WM_HSCROLL_IE

Func WM_VSCROLL_IE($hWnd, $iMsg, $wParam, $lParam)
    #forceref $iMsg, $lParam

    Local $Min, $Max, $Page, $TrackPos

;~  ; Get all the horizontal scroll bar information
    Local $tSCROLLINFO_Y = _GUIScrollBars_GetScrollInfoEx($hWnd, $SB_VERT)
    $Min = DllStructGetData($tSCROLLINFO_Y, "nMin")
    $Max = DllStructGetData($tSCROLLINFO_Y, "nMax")
    $Page = DllStructGetData($tSCROLLINFO_Y, "nPage")
    ; Save the position for comparison later on
    $IE_offset_y = DllStructGetData($tSCROLLINFO_Y, "nPos")
    $TrackPos = DllStructGetData($tSCROLLINFO_Y, "nTrackPos")
    #forceref $Min, $Max
    Local $nScrollCode = BitAND($wParam, 0x0000FFFF)
    Switch $nScrollCode

        Case $SB_LINELEFT ; user clicked left arrow
            DllStructSetData($tSCROLLINFO_Y, "nPos", $IE_offset_y - 1)

        Case $SB_LINERIGHT ; user clicked right arrow
            DllStructSetData($tSCROLLINFO_Y, "nPos", $IE_offset_y + 1)

        Case $SB_PAGELEFT ; user clicked the scroll bar shaft left of the scroll box
            DllStructSetData($tSCROLLINFO_Y, "nPos", $IE_offset_y - $Page)

        Case $SB_PAGERIGHT ; user clicked the scroll bar shaft right of the scroll box
            DllStructSetData($tSCROLLINFO_Y, "nPos", $IE_offset_y + $Page)

        Case $SB_THUMBTRACK ; user dragged the scroll box
            DllStructSetData($tSCROLLINFO_Y, "nPos", $TrackPos)
    EndSwitch

    DllStructSetData($tSCROLLINFO_Y, "fMask", $SIF_POS)
    _GUIScrollBars_SetScrollInfo($hWnd, $SB_VERT, $tSCROLLINFO_Y)

    $IE_offset_y = DllStructGetData($tSCROLLINFO_Y, "nPos")

    DrawImage($hGfx_Context, $hBitmap, $IE_offset_x, $IE_offset_y, $iW, $iH)
    $bMove_Crop = False
    WinMove($hGUI_IE_Crop, "", -1 * $IE_offset_x + $iPosX_Crop + $iDeltaX_Crop, -1 * $IE_offset_y + $iPosY_Crop + $iDeltaY_Crop)
    $bMove_Crop = True

    Return "GUI_RUNDEFMSG"
EndFunc   ;==>WM_VSCROLL_IE

Func WM_MOVE_IE_GUI_Crop($hWnd, $iMsg, $wParam, $lParam)
    #forceref $iMsg, $wParam
    If $hWnd = $hGUI_IE_Crop And $bMove_Crop Then
        $iPosX_Crop = _WinAPI_LoWord($lParam)
        $iPosY_Crop = _WinAPI_HiWord($lParam)
        $iDeltaX_Crop = ($IE_offset_X > 0 ? $IE_offset_X : 0)
        $iDeltaY_Crop = ($IE_offset_Y > 0 ? $IE_offset_Y : 0)
    EndIf
    Return "GUI_RUNDEFMSG"
EndFunc   ;==>WM_MOVE_IE_GUI_Crop


Func DrawImage($hGfx_Context, $hBitmap, $IE_offset_x, $IE_offset_y, $iW, $iH)
    _GDIPlus_GraphicsDrawImageRectRect($hGfx_Context, $hBitmap, $IE_offset_x, $IE_offset_y, $iW, $iH, 0, 0, $iW, $iH)
    $hHBitmap_tmp = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hBitmap_tmp)
    _WinAPI_DeleteObject(GUICtrlSendMsg($idPic, $STM_SETIMAGE, $IMAGE_BITMAP, $hHBitmap_tmp))
    _WinAPI_DeleteObject($hHBitmap_tmp)
EndFunc

 

Edited by UEZ

Please don't send me any personal message and ask for support! I will not reply!

Selection of finest graphical examples at Codepen.io

The own fart smells best!
Her 'sikim hıyar' diyene bir avuç tuz alıp koşma!
¯\_(ツ)_/¯  ٩(●̮̮̃•̃)۶ ٩(-̮̮̃-̃)۶ૐ

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...