Necesito quitarle a un MDI como maximizar, minimizar y cerrar en Visual Basic 6

Disculpa la molestia pero tengo una pregunta para ti, no tengo mucha exp. En visual basic 6 así que si me puedes enviar una explicación bien definida te lo agradecería, necesito quitarle a un MDI como maximizar, minimizar y cerrar.

3 Respuestas

Respuesta
1
Esta pregunta me suena. Creo que te la contesté así.
Veamos. Para bloquear el tamaño de una ventana en el form_resize ponle esto :
Private Sub MDIForm_Resize()
Me.Height = TAMAÑO
Me.Width = TAMAÑO
End Sub
Si no quieres que se minimize ni maximize entonces ponle esto :
Te declaras estas funciones de las SDK
Private Const WS_MINIMIZEBOX = &H20000
Private Const WS_MAXIMIZEBOX = &H10000
Private Const GWL_STYLE = (-16)
Private Declare Function SetWindowLong Lib "user32" Alias _
"SetWindowLongA" (ByVal hwnd As Long, _
ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Declare Function GetWindowLong Lib "user32" Alias _
"GetWindowLongA" (ByVal hwnd As Long, _
ByVal nIndex As Long) As Long
Y le pones esto en el Form Load :
Private Sub MDIForm_Load()
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)
End Sub
Si quieres que el formulario no tenga ademas el botón cerrar, añádele esto (te pongo todo el código directamente) :
'Constante del boton de minimizado
Private Const WS_MINIMIZEBOX = &H20000
'Constante del boton de maximizado
Private Const WS_MAXIMIZEBOX = &H10000
' Constante de menu de systema
Private Const WS_SYSMENU = &H80000
' APIs que necesitas :
' API que obtiene en formato de numero entero largo las caracteristicas visuales de la ventana.
Private Declare Function SetWindowLong Lib "user32" Alias _
"SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, _
ByVal dwNewLong As Long) As Long
' API que pone en una ventana las características visuales de un entero Largo
Private Declare Function GetWindowLong Lib "user32" Alias _
"GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) _
As Long
¿Qué cómo se almacenan las características en un entero largo? Bueno, no entro mucho en detalle, no me lo se de memoria, pero piensa que un número cualquiera se puede pasar a binario. Supongamos que una ventana tiene el número 19 como definidor de sus caráceristicas. 19 es 11001. Si lo miras desde un punto de vista matématico puro, y cada dígito lo correspondes a un valor, es sencillo calcular que (por ejemplo) el primer dígito te indica si esta maximizada (cuando vale 1) o no (cuando vale 0)la ventana. El segundo si es un MDI (en valor 1) o no (en valor 0). Cuando le haces un Not a la variable, realmente lo que le pasas con el NOT es un valor binario. Si la variable tiene estos valores 10101 y le dices que le haga un NOT al minimized (el primer dígito) lo que te devolverá es 00101. Con lo que al aplicar la función para asignarle el long a la ventana, le quitara el valor minimizado. Ah un detalle, repito, estos valores de ejemplo son inventados. Los válidos los tienes en la MSDN y en el código que te paso.
Y en el form load del formulario le pones este código :
Private Sub MDIForm_Load()
Dim L As Long
' Optiene en un long las caracteristicas de La ventana
L = GetWindowLong(Me.hwnd, GWL_STYLE)
' A las características (almacenadas en L) le quita la de los botones :
L = L And Not (WS_MINIMIZEBOX)
L = L And Not (WS_MAXIMIZEBOX)
L = L And Not (WS_SYSMENU)
'Le dice a la ventana su nuevo formato
L = SetWindowLong(Me.hwnd, GWL_STYLE, L)
End Sub
Respuesta
1
Para averiguar el estilo de una ventana se usa la función API GetWindowLong, que permite averiguar otras muchas cosas. Según esto y sabiendo que los estilos que definen el que una ventana tenga botones de maximizar, minimizar, etc.. son WS_MAXIMIZEBOX, WS_MINIMIZEBOX, etc... bastará escribir una línea de código como la siguiente para anular esos valores: SetWindowLong Me. HWnd, GWL_STYLE, (GetWindowLong(Me. HWnd, GWL_STYLE) And Not WS_MINIMIZEBOX) De este modo eliminaríamos el botón de minimizar (concretamente aparecería inhabilitado). Lo mismo ocurriría para el caso del botón de maximizar. Sin embargo, si lo que quiere realmente es eliminar todo rastro de los botones e iconos que aparecen en la barra de su formulario MDI la manera más sencilla de hacerlo es eliminando directamente el menú de sistema que todas las ventanas suelen tener (el que sale al pulsar sobre el icono de la izquierda). Para ello escriba el siguiente código al cargar el formulario:
Private Sub MDIForm_Load() SetWindowLong Me.hWnd, GWL_STYLE, (GetWindowLong(Me.hWnd, GWL_STYLE) And Not WS_SYSMENU)
End Sub
De todas maneras así desaparecerán los menús pero el usuario seguirá pudiendo maximizar y restaurar la ventana haciendo doble-clic sobre su barra de títulos. Para evitar este efecto se debe anular también el botón de maximizar aunque no se vea:
Private Sub MDIForm_Load() SetWindowLong Me.hWnd, GWL_STYLE, ((GetWindowLong(Me.hWnd, GWL_STYLE) And Not WS_SYSMENU)And Not WS_MAXIMIZEBOX)
End Sub
De esta forma la ventana adquiere el aspecto y comportamiento que usted estaba buscando.
Respuesta
1
No se puede, en una forma MDI no existen las propiedades MaxButton ni MinButton.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas