调用 AllocConsole() 函数能够创建一个新的控制台窗口,而 FreeConsole() 函数则用于开释该控制台窗口的资源。

可是,在实际使用时,FreeConsole() 函数并不一定会封闭控制台窗口。

这是因为控制台窗口可能被其他进程或线程同享。假如当前进程拥有的控制台窗口正在被其他进程或线程使用,那么调用 FreeConsole() 函数并不会封闭该窗口。

相反,它只会将当前进程与控制台窗口的相关免除,使其他进程或线程能够持续使用该窗口。

假如要彻底封闭控制台窗口,需要确保它没有被其他进程或线程使用,并调用如下代码:

FreeConsole();
PostMessage(GetConsoleWindow(), WM_QUIT, 0, 0);

WM_CLOSE / WM_QUIT / WM_DESTROY

这三个音讯都是 Windows 音讯,用于操作控件或窗口。

它们的作用如下:

WM_CLOSE

当用户单击窗口的封闭按钮时,Windows 发送 WM_CLOSE 音讯给该窗口。

假如窗口处理了这个音讯,阐明窗口现已准备好封闭,并且能够调用 DestroyWindow() 函数来毁掉该窗口。

当收到WM_CLOSE音讯,你能够做两件事儿。一件是你接受默认的处理并返回一个值,你若这样做了,应用程序或窗口依照计划封闭,或许返回0,应用程序或窗口将保持原样。

WM_QUIT

当调用 PostQuitMessage() 函数时,将发送 WM_QUIT 音讯到该线程的音讯行列中。

Windows 会在此音讯被处理后从该线程的音讯循环中退出,因而 WM_QUIT 通常用于正常地退出 GUI 程序。

当一个用户封闭了主窗口,并期望这意味着是要完毕应用程序时,假如你期望真的这么做,那么在收到WM_DESTROY音讯的时候,你必须宣布一个WM_QUIT音讯。

WM_QUIT是应用程序完毕宣布的音讯,一般能够当作进程被kill掉的情况。

WM_DESTROY

当一个窗口被毁掉时,Windows 发送 WM_DESTROY 音讯给该窗口。

假如处理了这个音讯,阐明窗口现已被毁掉,并且能够做一些整理工作。

当收到WM_DESTROY音讯的时候,窗口现已从视觉上被删除,但一个主窗口被封闭,并不意味着应用程序完毕了,因为它能够在没有窗口的条件下持续运行。