C ++单击红色X时阻止控制台窗口关闭

时间:2013-04-05 13:09:16

标签: windows visual-c++ console-application

我正在开发一个简单的C ++控制台应用程序,没有类和&对象。
是否有任何方法或功能可以防止控制台在单击红色X按钮时关闭?
我正在使用Visual Studio C ++ Express 2010:一个简单的控制台应用程序,它只包含main.cpp文件。 谢谢你回答我的问题:) !!

5 个答案:

答案 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 FunctionsMenu Functions

答案 1 :(得分:4)

您可以使用SetConsoleCtrlHandler来控制控制台窗口。您需要编写一个回调来处理事件(例如CTRL_CLOSE_EVENT)。您还可以使用GetConsoleWindow函数来获取窗口句柄,并处理窗口消息。我已经用前一种方法控制了窗口,并且不确定处理特定的窗口消息(通过窗口句柄)。

参考Console Functions

答案 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。