我正在开发一个没有类和对象的简单 C++ 控制台应用程序。
是否有任何方法或功能可以防止单击红色 X 按钮时控制台关闭?
我正在使用 Visual Studio C++ Express 2010:一个仅包含 main.cpp 文件的简单控制台应用程序。谢谢你回答我的问题 :) !!
问问题
8039 次
5 回答
6
这对我有用:
#include "conio.h"
void main()
{
HWND hwnd = GetConsoleWindow();
HMENU hmenu = GetSystemMenu(hwnd, FALSE);
EnableMenuItem(hmenu, SC_CLOSE, MF_GRAYED);
}
当我们这样做时,重新启用按钮:
EnableMenuItem(hmenu, SC_CLOSE, MF_ENABLED);
...并设置窗口的标题:
char consoleTitle[256];
wsprintf(consoleTitle, _T("My little window"));
SetConsoleTitle((LPCTSTR)consoleTitle);
我看到大多数参考文献都使用DeleteMenu
而不是EnableMenuItem
. 我更喜欢后者,因为您可以获得更多控制权(启用/禁用/灰色等)。有关完整选项,请查看 MSDN控制台功能和菜单功能
于 2013-07-25T08:58:55.460 回答
4
您可以使用SetConsoleCtrlHandler来控制控制台窗口。您需要编写一个回调来处理事件(例如CTRL_CLOSE_EVENT
)。您也可以使用GetConsoleWindow函数来获取窗口句柄,并处理窗口消息。我已经用以前的方法控制了窗口,不确定是否处理特定的窗口消息(通过窗口句柄)。
请参阅控制台功能。
于 2013-04-06T09:10:03.993 回答
1
如果您正在接收窗口的消息,则可以捕获窗口的关闭消息并阻止它关闭。不幸的是,控制台独立于其中运行的程序,您没有那种控制权。
于 2013-04-05T17:31:02.893 回答
1
抱歉,这不是评论,我还没有足够的积分来评论。
您不能只删除表单属性中的按钮吗?
于 2013-04-05T17:26:07.200 回答
0
你总是可以使用信号:
#include <cstdio>
void my_handler(int param) {
main();
}
int main() {
signal(SIGABRT, my_handler);
signal(SIGTERM, my_handler);
return 0;
}
您显然应该允许用户选择关闭应用程序,方法是更改 my_handler. my_handler 调用 main,因此每当程序关闭时,都会调用 my_handler,因此调用 main。
于 2017-03-01T01:43:28.487 回答