Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/146.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何添加事件以退出窗口?_C++_C_Winapi - Fatal编程技术网

C++ 如何添加事件以退出窗口?

C++ 如何添加事件以退出窗口?,c++,c,winapi,C++,C,Winapi,我知道可以通过调用exit(0)函数来关闭应用程序。通过使用它,调用之前所有堆分配的内存都被清除。所以你不用担心 但是为了调试程序并更好地调查是否存在内存泄漏,在不首先释放所有内存的情况下关闭程序是不切实际的 因此,我想通过添加系统通过按下窗口上的X按钮发送的相同消息来计划关闭(WM_CLOSE) 通过该消息(或事件),程序可以执行关闭应用程序的代码 所以问题是,是否有任何函数或winapi中的某些东西将该消息添加到当前进程中?如果您可以将WM\u CLOSE替换为SIGINT,您可以在SIGI

我知道可以通过调用
exit(0)
函数来关闭应用程序。通过使用它,调用之前所有堆分配的内存都被清除。所以你不用担心

但是为了调试程序并更好地调查是否存在内存泄漏,在不首先释放所有内存的情况下关闭程序是不切实际的

因此,我想通过添加系统通过按下窗口上的X按钮发送的相同消息来计划关闭(
WM_CLOSE

通过该消息(或事件),程序可以执行关闭应用程序的代码


所以问题是,是否有任何函数或winapi中的某些东西将该消息添加到当前进程中?

如果您可以将
WM\u CLOSE
替换为
SIGINT
,您可以在
SIGINT
上执行一个简单的信号来调用您自己的函数(不知道您可以在
WM_CLOSE
上使用它,但在Windows上使用
SIGINT
进行测试)

下面是一个信号的例子


下面是如何发出
SIGINT

您可以将WINAPI
SendMessage
WM\u CLOSE
一起用于
Msg
参数


这里有更多关于此功能的信息:

消息循环接收
WM\u CLOSE
消息。这完全是错误的。分析是,一些开发人员可能会怎么想。事实并非如此。首先,不是每个窗口都能通过按钮关闭。那些能够关闭的窗口,可以用多种不同的方式来关闭。s标准Windows方式是有一个系统菜单项,最终导致关闭按钮向窗口的窗口过程发送一条
WM_close
消息。默认实现(
DefWindowProc
)通过调用窗口句柄上的
DestroyWindow
进行响应。无论您一直在按什么编辑,您都有询问的历史记录。非常肯定,这里也是这样。那么您最终想要完成什么呢?@IInspectable,我只想安排关闭应用程序。我无法调用
exit(0)
函数内部无法释放以前创建的一些堆数据。我将尝试您提到的
销毁窗口
;)在调用
退出(0)之前不释放堆分配的内存
不会改变一件事。您正在破坏一个进程。为什么在拆掉房子之前要先清理?你打算如何进入目标流程,如何“安排关闭应用程序”(不管这意味着什么)。很难知道这个答案是关于什么的。这是怎么回事。您链接的MSDN页面中的非现场链接:“任何Win32应用程序都不支持SIGINT。”