Si eliminamos opciones del menú de control (-) de un formulario impedimos que esas mismas acciones se puedan realizar de otras formas. Si quitamos la opción Cerrar el botón de cerrar el formulario (x) quedará dehabilitado. Si eliminamos la opción Mover el formulario no se podrá mover arratrándolo por la barra de titulo, etc. Veamos un ejemplo de cómo impedir el funcionamiento del botón Cerrar de la barra de titulo : Declaramos en un módulo : Public Const MF_BYPOSITION = &H400 Public Const MF_REMOVE = &H1000 Public Declare Function DrawMenuBar Lib "user32" _ (ByVal hwnd As Long) As Long Public Declare Function GetMenuItemCount Lib "user32" _ (ByVal hMenu As Long) As Long Public Declare Function GetSystemMenu Lib "user32" _ (ByVal hwnd As Long, _ ByVal bRevert As Long) As Long Public Declare Function RemoveMenu Lib "user32" _ (ByVal hMenu As Long, _ ByVal nPosition As Long, _ ByVal wFlags As Long) As Long Y para deshabilitar el botón Cerrar eliminamos la opción Cerrar del menú : Dim hMenu As Long Dim menuItemCount As Long 'Obtenemos un handle al menú de sistema del formulario hMenu = GetSystemMenu(Me.hwnd, 0) If hMenu Then 'Obtenemos el número de elementos del menú menuItemCount = GetMenuItemCount(hMenu) 'Eliminamos el elemento Cerrar, que es el último 'Los elemento empiezan a numerarse en cero por lo que el 'último es menuItemCount - 1 Call RemoveMenu(hMenu, menuItemCount - 1, _ MF_REMOVE Or MF_BYPOSITION) 'Eliminamos la barra de separación que hay justo antes de la opción Cerrar Call RemoveMenu(hMenu, menuItemCount - 2, _ MF_REMOVE Or MF_BYPOSITION) 'Forzamos el redibujado del menú. Esto refresca la barra de titulo 'y deja la X deshabilitada Call DrawMenuBar(Me.hwnd) End If Eliminando los botones de maximizar y minimizar siguiendo el método del artículo anterior no quedaban deshabilitados, aunque no funcionaran. Esto se soluciona haciendo esto ANTES de eliminar las opciones del menú (si no las eliminas no quedarán en la barra de titulo pero sí en en el menú de control) : Dim L As Long L = GetWindowLong(Me.hwnd, GWL_STYLE) L = L And Not (WS_MINIMIZEBOX) L = L And Not (WS_MAXIMIZEBOX) L = SetWindowLong(Me.hwnd, GWL_STYLE, L) Las declaraciones son : 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 GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long Public Const WS_MINIMIZEBOX = &H20000 Public Const WS_MAXIMIZEBOX = &H10000 Public Const GWL_STYLE = (-16) En realidad no es que sea necesario quitar los "botones" antes que las opciones del menú lo que se debe hacer es llamar a "DrawMenuBar" para que el efecto se vea en la pantalla y como ya se hace para quitar las opciones del menú ...
Me parecido excelente la respuesta que me diste era mucho más de lo que esperaba, pues pensaba yo que era una propiedad de simple cambio de valores Gracias