Not a Member Yet,
Click here to Register

ID: 164
Viewed: 3031
Added: Apr 29, 2002
Version:
Snippet uploaded by: snippet
Written By: Pete Cozens
Demo: Sorry, no demo



User Rated at: 0 Stars
Rate This:

Thank you for your vote. Please wait...

It appears you already voted for this snippet

It appears your vote value was empty

************************************************* Enables / Disables the close button on the titlebar and in the system menu of the form window passed. ----------------------------------------------- Return Values: 0 Close button state changed succesfully / nothing to do. -1 Invalid Window Handle (hWnd argument) Passed to the function -2 Failed to switch command ID of Close menu item in system menu -3 Failed to switch enabled state of Close menu item in system menu --------------------------------------------- Parameters: hWnd The window handle of the form whose close button is to be enabled/ disabled / greyed out. Enable True if the close button is to be enabled, or False if it is to be disabled / greyed out. ---------------------------------------------- Example: Add a form window to your project, and place a button on the form. Add the following in the form's code window: Option Explicit Private m_blnCloseEnabled As Boolean Private Sub Form_Load() m_blnCloseEnabled = True Command1.Caption = "Disable" End Sub Private Sub Command1_Click() m_blnCloseEnabled = Not m_blnCloseEnabled EnableCloseButton Me.hwnd, m_blnCloseEnabled If m_blnCloseEnabled Then Command1.Caption = "Disable" Else Command1.Caption = "Enable" End If End Sub --------------------------------------

Highlight all by clicking in box
<!---Declaration--->
'
' From Pete Cozens Example on the CodeGuru Site
'

Private Const SC_CLOSE As Long = &HF060&
Private Const MIIM_STATE As Long = &H1&
Private Const MIIM_ID As Long = &H2&
Private Const MFS_GRAYED As Long = &H3&
Private Const WM_NCACTIVATE As Long = &H86

Private Type MENUITEMINFO
cbSize As Long
fMask As Long
fType As Long
fState As Long
wID As Long
hSubMenu As Long
hbmpChecked As Long
hbmpUnchecked As Long
dwItemData As Long
dwTypeData As String
cch As Long
End Type

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

Private Declare Function GetMenuItemInfo Lib "user32" Alias _
"GetMenuItemInfoA" (ByVal hMenu As Long, ByVal un As Long, _
ByVal b As Boolean, lpMenuItemInfo As MENUITEMINFO) As Long

Private Declare Function SetMenuItemInfo Lib "user32" Alias _
"SetMenuItemInfoA" (ByVal hMenu As Long, ByVal un As Long, _
ByVal bool As Boolean, lpcMenuItemInfo As MENUITEMINFO) As Long

Private Declare Function SendMessage Lib "user32" Alias _
"SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, _
ByVal wParam As Long, lParam As Any) As Long

Private Declare Function IsWindow Lib "user32" _
(ByVal hWnd As Long) As Long

'-----------------------------------------------
Public Function EnableCloseButton(ByVal hWnd As Long, Enable As Boolean) _
As Integer
Const xSC_CLOSE As Long = -10

' Check that the window handle passed is valid

EnableCloseButton = -1
If IsWindow(hWnd) = 0 Then Exit Function

' Retrieve a handle to the window's system menu

Dim hMenu As Long
hMenu = GetSystemMenu(hWnd, 0)

' Retrieve the menu item information for the close menu item/button

Dim MII As MENUITEMINFO
MII.cbSize = Len(MII)
MII.dwTypeData = String(80, 0)
MII.cch = Len(MII.dwTypeData)
MII.fMask = MIIM_STATE

If Enable Then
MII.wID = xSC_CLOSE
Else
MII.wID = SC_CLOSE
End If

EnableCloseButton = -0
If GetMenuItemInfo(hMenu, MII.wID, False, MII) = 0 Then Exit Function

' Switch the ID of the menu item so that VB can not undo the action itself

Dim lngMenuID As Long
lngMenuID = MII.wID

If Enable Then
MII.wID = SC_CLOSE
Else
MII.wID = xSC_CLOSE
End If

MII.fMask = MIIM_ID
EnableCloseButton = -2
If SetMenuItemInfo(hMenu, lngMenuID, False, MII) = 0 Then Exit Function

' Set the enabled / disabled state of the menu item

If Enable Then
MII.fState = (MII.fState Or MFS_GRAYED)
MII.fState = MII.fState - MFS_GRAYED
Else
MII.fState = (MII.fState Or MFS_GRAYED)
End If

MII.fMask = MIIM_STATE
EnableCloseButton = -3
If SetMenuItemInfo(hMenu, MII.wID, False, MII) = 0 Then Exit Function

' Activate the non-client area of the window to update the titlebar, and
' draw the close button in its new state.

SendMessage hWnd, WM_NCACTIVATE, True, 0

EnableCloseButton = 0

End Function

Highlight All
<!---Code--->
none;


No Comments to show

Please completely fill out the form below if you want to review this snippet. All reviews are subject to validation.


Replying to a Comment...


Adding your comment. Please wait...

Thanks for adding your comment!. After further review it will be added.

There was a problem adding your comment. Please try again.

Please complete all the fields in the form before sending.

© 2002 - 2024 snippetlibrary.com All Rights Reserved. Conditions
Do NOT follow this link or you will be banned from the site!