is there any way to stop MDI form to be maximized .. i want to disable the maximize button of MDI form and want to stop Resizing of MDI form also !!! any way to do this or any API Function to do this ??
Printable View
is there any way to stop MDI form to be maximized .. i want to disable the maximize button of MDI form and want to stop Resizing of MDI form also !!! any way to do this or any API Function to do this ??
VB Code:
Private Sub Form_Resize() Me.WindowState = vbNormal Me.Move , , MyWidth, MyHeight End Sub
i tried it .. but this gives a flickering view ...
it gets maximized once and then became normal which looks bad .. any thing by which i can even disable the button etc ..
Set the child form's BorderStyle to Fixed Dialog.
Add a module to your project:
Module Code
MDIForm CodeVB Code:
Public g_lngDefWindowProc As Long Public g_lngMinX As Long Public g_lngMinY As Long Public g_lngMaxX As Long Public g_lngMaxY As Long Public p_Form As Form Public Const GWL_WNDPROC As Long = (-4) Public Const WM_GETMINMAXINFO As Long = &H24 Public Type POINTAPI x As Long y As Long End Type Type MINMAXINFO ptReserved As POINTAPI ptMaxSize As POINTAPI ptMaxPosition As POINTAPI ptMinTrackSize As POINTAPI ptMaxTrackSize As POINTAPI End Type Public Const WS_MINIMIZEBOX = &H20000 Public Const WS_MAXIMIZEBOX = &H10000 Public Const GWL_STYLE = (-16) Public Const WS_MAXIMIZE = &H1000000 Public Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long Public Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hwnd As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (hpvDest As Any, hpvSource As Any, ByVal cbCopy As Long) Public Sub SubClass(hwnd As Long) On Error Resume Next g_lngDefWindowProc = SetWindowLong(hwnd, GWL_WNDPROC, AddressOf WindowProc) End Sub Public Sub UnSubClass(hwnd As Long) If g_lngDefWindowProc Then SetWindowLong hwnd, GWL_WNDPROC, g_lngDefWindowProc g_lngDefWindowProc = 0 End If End Sub Public Function WindowProc(ByVal p_lngHwnd As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long Dim udtMMI As MINMAXINFO On Error Resume Next Select Case p_lngHwnd Case p_Form.hwnd Select Case uMsg Case WM_GETMINMAXINFO CopyMemory udtMMI, ByVal lParam, LenB(udtMMI) 'set the MINMAXINFO data to the 'minimum and maximum values set 'by the option choice With udtMMI .ptMinTrackSize.x = g_lngMinX .ptMinTrackSize.y = g_lngMinY .ptMaxTrackSize.x = g_lngMaxX .ptMaxTrackSize.y = g_lngMaxY End With CopyMemory ByVal lParam, udtMMI, LenB(udtMMI) 'according to MSDN we have to return 0 if we 'processed the message ourselves WindowProc = 0 Case Else 'take care of other messages WindowProc = CallWindowProc(g_lngDefWindowProc, p_lngHwnd, uMsg, wParam, lParam) End Select End Select End Function
VB Code:
Private Sub MDIForm_Load() Dim lngStyle As Long Me.Show lngStyle = GetWindowLong(Me.hwnd, GWL_STYLE) lngStyle = lngStyle And Not (WS_MAXIMIZEBOX) Xor WS_MAXIMIZE lngStyle = SetWindowLong(Me.hwnd, GWL_STYLE, lngStyle) 'setup the max and min form sizes 'you can set any min and max number 'to get the desired effect g_lngMaxX = 400 g_lngMaxY = 400 g_lngMinX = 400 g_lngMinY = 400 Set p_Form = Me Call SubClass(Me.hwnd) End Sub Private Sub MDIForm_Unload(Cancel As Integer) Call UnSubClass(Me.hwnd) End Sub