我正在开发一个简单的C ++控制台应用程序,没有类和&对象。
是否有任何方法或功能可以防止控制台在单击红色X按钮时关闭?
我正在使用Visual Studio C ++ Express 2010:一个简单的控制台应用程序,它只包含main.cpp文件。
谢谢你回答我的问题:) !!
答案 0 :(得分:5)
这对我有用:
#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 Console Functions和Menu Functions
答案 1 :(得分:4)
您可以使用SetConsoleCtrlHandler来控制控制台窗口。您需要编写一个回调来处理事件(例如CTRL_CLOSE_EVENT
)。您还可以使用GetConsoleWindow函数来获取窗口句柄,并处理窗口消息。我已经用前一种方法控制了窗口,并且不确定处理特定的窗口消息(通过窗口句柄)。
答案 2 :(得分:1)
如果您正在接收窗口消息,则可以捕获窗口的关闭消息并阻止其关闭。不幸的是,控制台独立于其中运行的程序,并且您没有这种控制。
答案 3 :(得分:0)
对不起,这不是评论,我还没有足够的评论来评论。
您不能只删除表单属性中的按钮吗?
答案 4 :(得分: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。