Date: 2008jul3
Platform: win32
Language: C/C++
Keywords: enable, disable, grey, gray, programmatically
Q. How do I disable a Window's close button?
The [X] thing in the top-right corner.
A. Here's a little function that does the trick:
// Disable or enable the [X] button in top-right corner
BOOL EnableCloseButton(const HWND hwnd, const BOOL bState)
{
HMENU hMenu;
if (hwnd == NULL) return FALSE;
if ((hMenu = GetSystemMenu(hwnd, FALSE)) == NULL) return FALSE;
const UINT uExtra = bState ? MF_ENABLED : (MF_DISABLED | MF_GRAYED);
return EnableMenuItem(hMenu, SC_CLOSE, MF_BYCOMMAND | uExtra) != -1;
}
// The MFC version...
#ifdef _MFC_VER
// Disable or enable the [X] button in top-right corner
BOOL EnableCloseButton(const CWnd *wnd, const BOOL bState)
{
CMenu *menu;
if (wnd == NULL) return FALSE;
if ((menu = wnd->GetSystemMenu(FALSE)) == NULL) return FALSE;
const UINT uExtra = bState ? MF_ENABLED : MF_GRAYED;
return menu->EnableMenuItem(SC_CLOSE, MF_BYCOMMAND | uExtra) != -1;
}
#endif
// Example use:
// To disable:
EnableCloseButton(hwnd, FALSE);
// To disable in MFC:
EnableCloseButton(AfxGetMainWnd(), FALSE);