C++ Prevent the console window from closing when red X is clicked

╄→尐↘猪︶ㄣ 提交于 2019-12-06 09:55:17

问题


I'm developing a simple C++ console application without classes & objects.
Is there any method or function to prevent the console from closing when red X button is clicked ?
I'm using Visual Studio C++ Express 2010 : A simple console application which containes only main.cpp file. Thank you for answering my question :) !!


回答1:


This worked for me:

#include "conio.h"
void main()
{
    HWND hwnd = GetConsoleWindow();
    HMENU hmenu = GetSystemMenu(hwnd, FALSE);
    EnableMenuItem(hmenu, SC_CLOSE, MF_GRAYED);
}

While we're at it, to re-enable the button:

EnableMenuItem(hmenu, SC_CLOSE, MF_ENABLED);

... and to set the window's title:

char consoleTitle[256];
wsprintf(consoleTitle, _T("My little window"));
SetConsoleTitle((LPCTSTR)consoleTitle);

I saw that most references used DeleteMenu and not EnableMenuItem. I preffer the later, as you get more control (enable/disable/greyed-out etc.). For full options, take a look at MSDN Console Functions and Menu Functions




回答2:


You can use SetConsoleCtrlHandler to control the console-window. You need to write up a callback to handle events (such as CTRL_CLOSE_EVENT). You may also use GetConsoleWindow function to get the window-handle, and handle window messages. I have done controlling the window with former method, and not sure about handling specific window message (via window-handle).

Refer Console Functions.




回答3:


It is possible to trap the close message for a window and prevent it from closing, if you are receiving messages for the window. Unfortunately a console is independent of the program running within it and you don't have that kind of control.




回答4:


Sorry this isn't a comment, I don't have enough points to comment yet.

Can't you just remove the button in the properties for the form?




回答5:


You could always use signals:

#include <cstdio>
void my_handler(int param) {
  main();
}
int main() {
  signal(SIGABRT, my_handler);
  signal(SIGTERM, my_handler);
  return 0;
}  

You should obviously allow an option for the user to close the app, by changing my_handler. my_handler calls main, so whenever the program is closed, my_handler is called, so therefore main is called.



来源:https://stackoverflow.com/questions/15834818/c-prevent-the-console-window-from-closing-when-red-x-is-clicked

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!