Что нового

WinMove с учетом бордюра. ( ака ClientMove/Resize )

maddoc

Новичок
Сообщения
48
Репутация
2
... Тут было много текста как делать Client Resize а не winresize через winmove . )
В итоге все оказалось проще ( нада спать больше )

Код:
Func _WinMoveAdv($hWnd, $X = "800", $Y = "600")
$sizeAdjust = WinGetPos($hWnd)
$sizeClient = WinGetClientSize($hWnd)
$Xoffset= ($sizeAdjust[2]-$sizeClient[0])
$Yoffset= ($sizeAdjust[3]-$sizeClient[1])
WinMove($hWnd, "", $sizeAdjust[0], $sizeAdjust[1], $X  + $Xoffset, $Y + $Yoffset)

EndFunc
 

FlatX007

Tattoo!
Сообщения
197
Репутация
35
Re: Advanced WinMove

Смотрим функцию - WM_MOVE

Код:
#NoTrayIcon
#region: - Option
    Opt('GUIOnEventMode',       1)
    Opt('MustDeclareVars',      1)
    Opt('TrayIconDebug',        0)
    Opt('TrayIconHide',         1)
#endregion

#region: - Include
    #include <GUIConstantsEx.au3>
    #include <WinAPI.au3>
    #include <WindowsConstants.au3>
#endregion

#region: - Global
; Main Win
    Global  $hMainWin
    Global  $iMainWinWidth      = 350
    Global  $iMainWinHeight     = 345
    Global  $iMainWinX          = -1
    Global  $iMainWinY          = -1

    Global  $iMainWinApiX, $iMainWinApiY
#endregion

#region: - Main Win
Func _MainWin_Create()
    $hMainWin = GUICreate('Test', $iMainWinWidth, $iMainWinHeight, $iMainWinX, $iMainWinY)
        GUISetState(@SW_SHOW, $hMainWin)
            GUISetOnEvent($GUI_EVENT_CLOSE, '_Pro_Exit')
EndFunc
#endregion

#region: - После создания всех GUI
    HotKeySet('{ESC}', '_Pro_Exit')
    GUIRegisterMsg($WM_MOVE, 'WM_MOVE')
    _MainWin_Create()
#endregion

#region: - Sleep, Exit
While 1
    Sleep(10)
WEnd

Func _Pro_Exit()
    Exit
EndFunc
#endregion


Func WM_MOVE($hWnd, $Msg, $wParam, $lParam)
    Local $aWinPos = WinGetPos($hWnd)
    Local $aWinClientSize = WinGetClientSize($hWnd)

    Local $iBorder_Size = ($aWinPos[2] - $aWinClientSize[0]) / 2
    Local $iCaption_Size = ($aWinPos[3] - $aWinClientSize[1]) - $iBorder_Size

    $iMainWinX  = $aWinPos[0]
    $iMainWinY  = $aWinPos[1]

    $iMainWinApiX  = _WinAPI_LoWord($lParam) - $iBorder_Size
    $iMainWinApiY  = _WinAPI_HiWord($lParam) - $iCaption_Size

    ToolTip('WinGetPos' & @CRLF & 'X = ' & $iMainWinX & @CRLF & 'Y = ' & $iMainWinY & @CRLF  & @CRLF & _
        'WinAPI' & @CRLF & 'X = ' & $iMainWinApiX & @CRLF & 'Y = ' & $iMainWinApiY, 10, 70)
		ConsoleWrite($iMainWinApiX & @CRLF)
EndFunc
#endregion
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4 020
Репутация
622
Re: Advanced WinMove

maddoc
1. переименуй тему в соответствие с правилами.
2. оформи первое сообщение с вопросом, который был изначально - как переместить окно с учетом бордюра (как-то так)
3. попроси модера (Garrett) переместить тему в раздел для новичков

решение может быть интересно и другим.
 
Автор
M

maddoc

Новичок
Сообщения
48
Репутация
2
Re: Advanced WinMove

Kaster сказал(а):
maddoc
1. переименуй тему в соответствие с правилами.
2. оформи первое сообщение с вопросом, который был изначально - как переместить окно с учетом бордюра (как-то так)
3. попроси модера (Garrett) переместить тему в раздел для новичков

решение может быть интересно и другим.
Готово, хотя ничего нового я не сказал. Проблемма в том что при поиске сложно угадать, как назвали нужную тему юзвери. Так как функции на англ, а пишут часто на русском.
 
Верх