Сообщение WM_GETMINMAXINFO

Const WM_GETMINMAXINFO = &H24

Сообщение WM_GETMINMAXINFO посылается окну для получения информации о минимальных или максимальных размерах окна при изменении размеров и положения этого окна. Окно получает это сообщение через функцию обратного вызова WindowProc. Может использоваться для изменения максимальных и минимальных размеров окна по умолчанию

Возвращаемое значение

Возвращаемое значение

Если приложение обрабатывает это сообщение, то возвращается 0

Параметры

wParam
Не используется - установлен в 0
lParam
Указатель на структуру MINMAXINFO

Пример

' Пример запрещения изменения размера формы
' больше, чем 500x500 пикселов и меньще, чем 200x200
' Код для формы

Private Sub Form_Load()
' Сохраним дескриптор формы
 gHW = Me.hwnd

' Субклассирование
 Hook
End Sub

Private Sub Form_Unload(Cancel As Integer) ' Завершаем субклассирование Unhook End Sub ' Код для модуля Private Const GWL_WNDPROC = -4 Private Const WM_GETMINMAXINFO = &H24 Private Type POINTAPI x As Long y As Long End Type Private Type MINMAXINFO ptReserved As POINTAPI ptMaxSize As POINTAPI ptMaxPosition As POINTAPI ptMinTrackSize As POINTAPI ptMaxTrackSize As POINTAPI End Type Global lpPrevWndProc As Long Global gHW As Long Private Declare Function DefWindowProc Lib "user32" Alias _ "DefWindowProcA" (ByVal hwnd As Long, ByVal wMsg As Long, _ ByVal wParam As Long, ByVal lParam As Long) As Long Private Declare Function CallWindowProc Lib "user32" Alias _ "CallWindowProcA" (ByVal lpPrevWndFunc As Long, _ ByVal hwnd As Long, ByVal Msg As Long, _ ByVal wParam As Long, ByVal lParam As Long) As Long Private Declare Function SetWindowLong Lib "user32" Alias _ "SetWindowLongA" (ByVal hwnd As Long, _ ByVal nIndex As Long, ByVal dwNewLong As Long) As Long Private Declare Sub CopyMemoryToMinMaxInfo Lib "KERNEL32" Alias _ "RtlMoveMemory" (hpvDest As MINMAXINFO, ByVal hpvSource As Long, _ ByVal cbCopy As Long) Private Declare Sub CopyMemoryFromMinMaxInfo Lib "KERNEL32" Alias _ "RtlMoveMemory" (ByVal hpvDest As Long, hpvSource As MINMAXINFO, _ ByVal cbCopy As Long)
Public Sub Hook() ' Начало субклассирования lpPrevWndProc = SetWindowLong(gHW, GWL_WNDPROC, _ AddressOf WindowProc) End Sub
Public Sub Unhook() Dim temp As Long temp = SetWindowLong(gHW, GWL_WNDPROC, lpPrevWndProc) End Sub
Function WindowProc(ByVal hw As Long, ByVal uMsg As Long, _ ByVal wParam As Long, ByVal lParam As Long) As Long Dim MinMax As MINMAXINFO ' Устанавливаем требуемые минимальные и ' максимальные размеры окна If uMsg = WM_GETMINMAXINFO Then ' Получаем значения по умолчанию CopyMemoryToMinMaxInfo MinMax, lParam, Len(MinMax) ' Устанавливаем новые минимальные размеры для окна MinMax.ptMinTrackSize.x = 200 MinMax.ptMinTrackSize.y = 200 ' Устанавливаем новые максимальные размеры для окна MinMax.ptMaxTrackSize.x = 500 MinMax.ptMaxTrackSize.y = 500 CopyMemoryFromMinMaxInfo lParam, MinMax, Len(MinMax) WindowProc = DefWindowProc(hw, uMsg, wParam, lParam) Else WindowProc = CallWindowProc(lpPrevWndProc, hw, uMsg, _ wParam, lParam) End If End Function

Смотри также

MoveWindow, SetWindowPos

Категория

Окна