Resumen Menues personalizados en menu de sistema

Mensaje enviado por "Gustavo Genovese" <ggenovese@ciudad.com.ar>

Se que muchos lo han preguntado a la lista, sin obtener respuesta (me incluyo)
Un codigo de ejemplo de como hacerlo es este:
Crear un proyecto nuevo y agregar un form.
En este form, agregar un menu, con un caption cualquiera, y darle un nombre
por ejemplo MNUPRUEBA
En el codigo del formulario, ingresar el siguiente codigo:

Option Explicit
Private Declare Function InsertMenu Lib "user32" Alias "InsertMenuA" _
 (ByVal hMenu As Long, ByVal nPosition As Long, _
ByVal wFlags As Long, ByVal wIDNewItem As Long, _
 ByVal lpNewItem As Any) As Long

Private Declare Function GetSystemMenu Lib "user32" _
(ByVal hWnd As Long, ByVal bRevert As Long) As Long

Const SC_SIZE = &HF000
Const SC_MOVE = &HF010
Const SC_MINIMIZE = &HF020
Const SC_MAXIMIZE = &HF030
Const SC_CLOSE = &HF060
Const SC_RESTORE = &HF120

Private Sub Form_Load()
    Dim hMenu&, Success&
    Dim i%
    hMenu = GetSystemMenu(hWnd, 0)
    Success = InsertMenu(hMenu, SC_CLOSE - 2, &H0, 128, mnuprueba.Caption)
    procOld = SetWindowLong(hWnd, GWL_WNDPROC, AddressOf WindowProc)
End Sub




Agregar un modulo y escribir el siguiente código:

Option Explicit
Public Const WM_SYSCOMMAND = &H112
Public procOld As Long



Public Declare Function CallWindowProc& Lib "user32" _
Alias "CallWindowProcA" _
 (ByVal lpPrevWndFunc&, _
ByVal hWnd&, ByVal Msg&, _
ByVal wParam&, ByVal lParam&)

Public Declare Function SetWindowLong& Lib "user32" _
Alias "SetWindowLongA" _
(ByVal hWnd&, _
ByVal nIndex&, ByVal dwNewLong&)
Public Const GWL_WNDPROC As Long = (-4&)


Public Function WindowProc(ByVal hWnd As Long, _
ByVal iMsg As Long, ByVal wParam As Long, _
ByVal lParam As Long) As Long

  Select Case iMsg
     Case WM_SYSCOMMAND
        If wParam = 128 Then 'valor asignado en InsertMenu
            MsgBox "Usted hizo clik en el menu personalizado"
        End If
  End Select

  WindowProc = CallWindowProc(procOld, _
    hWnd, iMsg, wParam, lParam)
End Function

Espero les sirva

Saludos
Gustavo Genovese
ggenovese@ciudad.com.ar
Mendoza - Argentina



Resumen Resumen

Visual Basic Página de Visual Basic

Página principal Página principal

www.jrubi.com