禁用C++控制台应用程序的最大化按钮

3

我正在维护一个运行控制台的旧C++应用程序。我已经禁用了"关闭"按钮。现在需要禁用最大化按钮。以下代码可以禁用关闭按钮:

DeleteMenu(GetSystemMenu(GetConsoleWindow(), FALSE), SC_CLOSE, MF_BYCOMMAND);
DrawMenuBar(GetConsoleWindow());

我已经添加了一行代码来禁用最大化按钮:

DeleteMenu(GetSystemMenu(GetConsoleWindow(), FALSE), SC_CLOSE, MF_BYCOMMAND);
DeleteMenu(GetSystemMenu(GetConsoleWindow(), FALSE), SC_MAXIMIZE, MF_BYCOMMAND);
DrawMenuBar(GetConsoleWindow());

它起作用了,按钮被禁用了,但它并没有变灰。(关闭按钮变灰了) 我错过了什么吗? 谢谢。


控制台窗口的外观并不是你应该随意修改的,我个人认为。使用Ctrl+Break仍然可以终止你的程序。 - Anders
1个回答

6

使用SetWindowLong来改变窗口样式,然后调用SetWindowPos。例如:

HWND hwnd = GetConsoleWindow();
DWORD style = GetWindowLong(hwnd, GWL_STYLE);
style &= ~WS_MAXIMIZEBOX;
SetWindowLong(hwnd, GWL_STYLE, style);
SetWindowPos(hwnd, NULL, 0, 0, 0, 0, SWP_NOSIZE|SWP_NOMOVE|SWP_FRAMECHANGED);

非常感谢你的两个答案。禁用功能起作用了。你是完全正确的 - Ctrl-Break仍然可以终止程序。禁用按钮只是防止意外操作。 - Marek

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接