【问题标题】:How to gray out close button in C++?如何在 C++ 中使关闭按钮变灰?
【发布时间】:2014-03-27 20:07:44
【问题描述】:

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

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

但是没有用。

【问题讨论】:

    标签: c++ winapi clr


    【解决方案1】:

    请参阅此处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;
    }
    

    【讨论】:

    • 由于某种原因,我收到了C2065: 'hwnd' : undeclared identifier 错误。 :l
    • 您使用的是哪个版本?我假设 Win32 版本。您是否在定义函数 EnableCloseButton() 的文件中包含 Windows.h?
    • 是的。我使用的是 Win32 版本。我包括了 Windows h,添加了 HWND hwnd;类下的代码,但它没有工作。
    • “在类下添加 HWND hwnd; 代码”到底是什么意思?能给我们看看相关的源代码吗?
    • namespace Tutorial { HWND hwnd; 我在InitializeComponent(); 下添加了EnableCloseButton(hwnd, FALSE);
    猜你喜欢
    • 2012-02-03
    • 1970-01-01
    • 2014-12-04
    • 2012-07-18
    • 2015-01-23
    • 2016-07-18
    • 2019-05-23
    • 2023-03-18
    • 1970-01-01
    相关资源
    最近更新 更多