Remove the Close command from the system menu

Remove the Close command from the system menu

If you want to prevent the user from closing a form by using Alt+F4 or by clicking on the “X” button in the upper-right corner you just need to write some code in the form’s QueryUnload event procedure:

Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)    If UnloadMode = vbFormControlMenu Then Cancel = TrueEnd Sub

However, if you want to give the user a visual clue that the she can’t manually close the form, you can programmatically remove the Close command from the form’s system menu. This action indirectly grays the “X” button and disables the Alt+F4 key. Here is the code that does the trick:

Private Declare Function RemoveMenu Lib "user32" (ByVal hMenu As Long, _    ByVal nPosition As Long, ByVal wFlags As Long) As LongPrivate Declare Function GetMenuItemCount Lib "user32" (ByVal hMenu As Long) As _    LongPrivate Declare Function GetSystemMenu Lib "user32" (ByVal hWnd As Long, _    ByVal bRevert As Long) As LongPrivate Const MF_BYPOSITION = &H400&Private Const MF_REMOVE = &H1000&Private Sub Form_Load()    Dim hMenu As Long    Dim itemCount As Long    ' get the handle of the system menu    hMenu = GetSystemMenu(Me.hWnd, 0)    ' get the number of items in the menu    itemCount = GetMenuItemCount(hMenu)    'remove the system menu Close menu item    RemoveMenu hMenu, itemCount - 1, MF_REMOVE Or MF_BYPOSITION    'remove the system menu separator line    RemoveMenu hMenu, itemCount - 2, MF_REMOVE Or MF_BYPOSITIONEnd Sub


Share the Post: