You are on page 1of 2

Si eliminamos opciones del men de control (-) de un formulario impedimos que esas mismas acciones se puedan realizar de otras

formas. Si quitamos la opcin Cerrar el botn de cerrar el formulario (x) quedar dehabilitado. Si eliminamos la opcin Mov er el formulario no se podr mover arratrndolo por la barra de ttulo, etc. Veamos un ejemplo de cmo impedir el funcionamiento del botn Cerrar de la barra de ttulo : Declaramos en un mdulo : 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 botn Cerrar eliminamos la opcin 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 nmero 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 separacin que hay justo antes de la opcin Cerrar Call RemoveMenu(hMenu, menuItemCount - 2, _ MF_REMOVE Or MF_BYPOSITION) 'Forzamos el redibujado del men. Esto refresca la barra de ttulo 'y deja la X deshabilitada Call DrawMenuBar(Me.hwnd) End If

Eliminando los botones de maximizar y minimizar siguiendo el mtodo del artculo ant erior no quedaban deshabilitados, aunque no funcionaran. Esto se soluciona hacie ndo esto ANTES de eliminar las opciones del men (si no las eliminas no quedarn en la barra de ttulo pero s en en el men de control) : Dim L = L = L = L = L As Long GetWindowLong(Me.hwnd, GWL_STYLE) L And Not (WS_MINIMIZEBOX) L And Not (WS_MAXIMIZEBOX) 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 ...

You might also like