如何在C ++中灰显关闭按钮?

时间:2014-03-27 20:07:45

标签: c++ winapi clr

如何在C ++中使关闭按钮变灰?可能吗? 我试过了;

#define WINVER 0x0500
#include<windows.h>
DeleteMenu(SystemMenu, SC_CLOSE, MF_BYCOMMAND);

但是没有用。

1 个答案:

答案 0 :(得分:0)

请参阅此处http://www.davekb.com/browse_programming_tips:win32_disable_close_button:txt,了解如何使用纯Win32或使用MFC进行操作。所有的功劳归功于他们。我刚刚写了解释。

此功能将启用或禁用(和灰显)Win32上的菜单选项(以及副作用,关闭按钮):

BOOL EnableCloseButton(const HWND hwnd, const BOOL bState)
{
    HMENU   hMenu;
    UINT    dwExtra;

    if (hwnd == NULL) return FALSE;
    if ((hMenu = GetSystemMenu(hwnd, FALSE)) == NULL) return FALSE;
    dwExtra = bState ? MF_ENABLED : (MF_DISABLED | MF_GRAYED);
    return EnableMenuItem(hMenu, SC_CLOSE, MF_BYCOMMAND | dwExtra) != -1;
}

窗口的HWND和关闭按钮的所需状态(TRUE启用,FALSE禁用)。

对于MFC,您可以使用此版本,它接受CWnd而不是HWND:

BOOL EnableCloseButton(const CWnd *wnd, const BOOL bState)
{
    CMenu *menu;

    if (wnd == NULL) return FALSE;
    if ((menu = wnd->GetSystemMenu(FALSE)) == NULL) return FALSE;
    return menu->EnableMenuItem(SC_CLOSE, MF_BYCOMMAND | bState ? MF_ENABLED : MF_GRAYED) != -1;
}