Что нового

Запретить изменение размеров окна, если они меньше

eus_deus

Новичок
Сообщения
118
Репутация
0
Привет.
Не могу сообразить - а как запретить изменение размера окна меньше установленных размеров?
Мой пример. Как сделать, чтобы нельзя было изменить ширину, если вышел за границы меньше 322, а высоту - меньше 400?
Код:
#include <GUIConstantsEx.au3>
#include <GuiListView.au3>
#include <WindowsConstants.au3>
Global $frm_book_mark,  $hLview2
_frm_single()

Func _frm_single()
    $frm_book_mark = GUICreate("", 400, 322, -1, -1, $WS_OVERLAPPEDWINDOW)
    $hInput = GUICtrlCreateInput("", 2, 2, 396, 20)
    GUICtrlSetResizing ($hInput, 550)
    $g_hInput = GUICtrlGetHandle($hInput)
    $lblAuthor = GUICtrlCreateLabel("Автор:", 2, 26, 60, 20)
    GUICtrlSetFont(-1, 10)
    GUICtrlSetResizing ($lblAuthor, 802)
    $inpAuthor = GUICtrlCreateInput("", 64, 24, 334, 20)
    GUICtrlSetFont(-1, 10)
    GUICtrlSetState($inpAuthor, $GUI_DISABLE)
    GUICtrlSetResizing ($inpAuthor, 550)
    $lblTitle = GUICtrlCreateLabel("Название:", 2, 50, 60, 20)
    GUICtrlSetFont(-1, 10)
    GUICtrlSetResizing ($lblTitle, 802)
    $inpTitle = GUICtrlCreateInput("", 64, 48, 334, 20)
    GUICtrlSetFont(-1, 10)
    GUICtrlSetState($inpTitle, $GUI_DISABLE)
    GUICtrlSetResizing ($inpTitle, 550)
    $hLview2 = GUICtrlCreateListView("№", 2, 70, 396, 250, BitOR($LVS_REPORT, $LVS_SHOWSELALWAYS), BitOR($LVS_EX_FULLROWSELECT, $LVS_EX_GRIDLINES, $LVS_EX_CHECKBOXES, $LVS_EX_INFOTIP, $LVS_EX_DOUBLEBUFFER))    
    _GUICtrlListView_AddColumn($hLview2, 'Название')
    _GUICtrlListView_SetColumnWidth($hLview2, 0, 60)
    _GUICtrlListView_SetColumnWidth($hLview2, 1, 315)
    GUICtrlSetFont(-1, 10)
     GUICtrlSetResizing ($hLview2, 102)
    $LView2 = GUICtrlGetHandle($hLview2)
    GUISetState(@SW_SHOWNORMAL, $frm_book_mark)
    GUICtrlSetState($hInput, $GUI_FOCUS)
    GUIRegisterMsg($WM_SIZE, "WM_SIZE")
    While 1
        $nMsg = GUIGetMsg()
        Switch $nMsg
            Case $GUI_EVENT_CLOSE
                Exit
        EndSwitch
    WEnd
EndFunc

Func WM_SIZE($hWnd, $iMsg, $wparam, $lparam)
    $aPos = WinGetPos($frm_book_mark)
    _GUICtrlListView_SetColumnWidth($hLview2, 1, $aPos[2] - 105)
    Return $GUI_RUNDEFMSG
EndFunc
 

Andrey_A

Продвинутый
Сообщения
323
Репутация
68
См. WM_GETMINMAXINFO
Код:
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
Global $k = 0
$Gui = GUICreate("WM_GETMINMAXINFO", 390, 140, -1, -1, $WS_OVERLAPPEDWINDOW)
GUICtrlCreateLabel('Функция WM_GETMINMAXINFO выполняется при перемещении окна, сворачивании и изменении размеров. Позволяет установить пределы увеличения и уменьшения окна, как по горизонтали, так и по вертикали индивидуально. А также позицию и размеры развёрнутого состояния. Установочные параметры можно игнорировать указав только необходимые параметры.', 5, 5, 360, 130)

GUISetState()

GUIRegisterMsg($WM_GETMINMAXINFO, "WM_GETMINMAXINFO")

Do
Until GUIGetMsg() = -3

Func WM_GETMINMAXINFO($hWnd, $iMsg, $wParam, $lParam)
    #forceref $iMsg, $wParam
    $k += 1
    WinSetTitle($Gui, '', 'Попытка ' & $k & ' раз')
    If $hWnd = $Gui Then
        Local $tMINMAXINFO = DllStructCreate("int;int;" & _
            "int MaxSizeX; int MaxSizeY;" & _
            "int MaxPositionX;int MaxPositionY;" & _
            "int MinTrackSizeX; int MinTrackSizeY;" & _
            "int MaxTrackSizeX; int MaxTrackSizeY", _
            $lParam)
        DllStructSetData($tMINMAXINFO, "MinTrackSizeX", 360) ; минимальные размеры окна
        DllStructSetData($tMINMAXINFO, "MinTrackSizeY", 130)
        DllStructSetData($tMINMAXINFO, "MaxTrackSizeX", 460) ; максимальные размеры окна
        DllStructSetData($tMINMAXINFO, "MaxTrackSizeY", 180)
        DllStructSetData($tMINMAXINFO, "MaxSizeX", 400) ; размеры развёрнутого состояния ( просто удали строку, чтоб игнорировать критерий)
        DllStructSetData($tMINMAXINFO, "MaxSizeY", 180)
        DllStructSetData($tMINMAXINFO, "MaxPositionX", 400) ; позиция в развёрнутом состоянии
        DllStructSetData($tMINMAXINFO, "MaxPositionY", 450)
    EndIf
    Return $GUI_RUNDEFMSG
EndFunc
 
Автор
E

eus_deus

Новичок
Сообщения
118
Репутация
0
Andrey_A, спасибо. Банально не дочитал...
 
Верх