Results 1 to 5 of 5

Thread: how to stop MDI form to get maximize ??

  1. #1

    Thread Starter
    Addicted Member chander's Avatar
    Join Date
    Nov 2000
    Location
    New Delhi , India
    Posts
    225

    how to stop MDI form to get maximize ??

    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 ??
    Chander
    Email:[email protected]

  2. #2
    Fanatic Member BrianHawley's Avatar
    Join Date
    Aug 2001
    Location
    Saudi Arabia
    Posts
    796
    VB Code:
    1. Private Sub Form_Resize()
    2.  
    3.   Me.WindowState = vbNormal
    4.   Me.Move , , MyWidth, MyHeight
    5.  
    6. End Sub
    Brian
    (Fighting with the RightToLeft bugs in VS 2005)

  3. #3

    Thread Starter
    Addicted Member chander's Avatar
    Join Date
    Nov 2000
    Location
    New Delhi , India
    Posts
    225
    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 ..
    Chander
    Email:[email protected]

  4. #4
    Fanatic Member BrianHawley's Avatar
    Join Date
    Aug 2001
    Location
    Saudi Arabia
    Posts
    796
    Set the child form's BorderStyle to Fixed Dialog.
    Brian
    (Fighting with the RightToLeft bugs in VS 2005)

  5. #5
    Serge's Avatar
    Join Date
    Feb 1999
    Location
    Scottsdale, Arizona, USA
    Posts
    2,744
    Add a module to your project:

    Module Code
    VB Code:
    1. Public g_lngDefWindowProc As Long
    2. Public g_lngMinX As Long
    3. Public g_lngMinY As Long
    4. Public g_lngMaxX As Long
    5. Public g_lngMaxY As Long
    6.  
    7. Public p_Form As Form
    8.  
    9. Public Const GWL_WNDPROC As Long = (-4)
    10. Public Const WM_GETMINMAXINFO As Long = &H24
    11.  
    12. Public Type POINTAPI
    13.     x As Long
    14.     y As Long
    15. End Type
    16.  
    17. Type MINMAXINFO
    18.     ptReserved As POINTAPI
    19.     ptMaxSize As POINTAPI
    20.     ptMaxPosition As POINTAPI
    21.     ptMinTrackSize As POINTAPI
    22.     ptMaxTrackSize As POINTAPI
    23. End Type
    24. Public Const WS_MINIMIZEBOX = &H20000
    25. Public Const WS_MAXIMIZEBOX = &H10000
    26. Public Const GWL_STYLE = (-16)
    27. Public Const WS_MAXIMIZE = &H1000000
    28. Public Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
    29. Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
    30. 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
    31. Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (hpvDest As Any, hpvSource As Any, ByVal cbCopy As Long)
    32.  
    33.  
    34. Public Sub SubClass(hwnd As Long)
    35.    On Error Resume Next
    36.    g_lngDefWindowProc = SetWindowLong(hwnd, GWL_WNDPROC, AddressOf WindowProc)
    37. End Sub
    38.  
    39.  
    40. Public Sub UnSubClass(hwnd As Long)
    41.    If g_lngDefWindowProc Then
    42.       SetWindowLong hwnd, GWL_WNDPROC, g_lngDefWindowProc
    43.       g_lngDefWindowProc = 0
    44.    End If
    45. End Sub
    46.  
    47. Public Function WindowProc(ByVal p_lngHwnd As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
    48.     Dim udtMMI As MINMAXINFO
    49.  
    50.     On Error Resume Next
    51.  
    52.     Select Case p_lngHwnd
    53.         Case p_Form.hwnd
    54.  
    55.             Select Case uMsg
    56.                 Case WM_GETMINMAXINFO
    57.                  
    58.                     CopyMemory udtMMI, ByVal lParam, LenB(udtMMI)
    59.      
    60.                     'set the MINMAXINFO data to the
    61.                     'minimum and maximum values set
    62.                     'by the option choice
    63.                     With udtMMI
    64.                         .ptMinTrackSize.x = g_lngMinX
    65.                         .ptMinTrackSize.y = g_lngMinY
    66.                         .ptMaxTrackSize.x = g_lngMaxX
    67.                         .ptMaxTrackSize.y = g_lngMaxY
    68.                     End With
    69.      
    70.                     CopyMemory ByVal lParam, udtMMI, LenB(udtMMI)
    71.                    
    72.                     'according to MSDN we have to return 0 if we
    73.                     'processed the message ourselves
    74.                     WindowProc = 0
    75.                    
    76.                 Case Else
    77.              
    78.                     'take care of other messages
    79.                     WindowProc = CallWindowProc(g_lngDefWindowProc, p_lngHwnd, uMsg, wParam, lParam)
    80.             End Select
    81.     End Select
    82. End Function
    MDIForm Code
    VB Code:
    1. Private Sub MDIForm_Load()
    2.     Dim lngStyle As Long
    3.    
    4.     Me.Show
    5.    
    6.     lngStyle = GetWindowLong(Me.hwnd, GWL_STYLE)
    7.     lngStyle = lngStyle And Not (WS_MAXIMIZEBOX) Xor WS_MAXIMIZE
    8.     lngStyle = SetWindowLong(Me.hwnd, GWL_STYLE, lngStyle)
    9.    
    10.     'setup the max and min form sizes
    11.     'you can set any min and max number
    12.     'to get the desired effect
    13.     g_lngMaxX = 400
    14.     g_lngMaxY = 400
    15.     g_lngMinX = 400
    16.     g_lngMinY = 400
    17.    
    18.     Set p_Form = Me
    19.     Call SubClass(Me.hwnd)
    20. End Sub
    21.  
    22. Private Sub MDIForm_Unload(Cancel As Integer)
    23.     Call UnSubClass(Me.hwnd)
    24. End Sub

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  



Click Here to Expand Forum to Full Width