【问题标题】:How to add event to exit a window?如何添加事件以退出窗口?
【发布时间】:2018-03-24 14:26:32
【问题描述】:

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

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

所以我想通过添加系统通过按下窗口上的 X 按钮发送的相同消息来安排关闭 (WM_CLOSE)。

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

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

【问题讨论】:

  • 消息循环接收WM_CLOSE消息。
  • 大错特错,到处都是。分析是,一些开发人员可能会怎么想。不是这种情况。一方面,并​​非每个窗口都提供通过按钮关闭它的能力。那些这样做的人可以通过多种不同的方式做到这一点。标准的 Windows 方法是有一个系统菜单项,最终导致关闭按钮向窗口的窗口过程发送WM_CLOSE 消息。默认实现 (DefWindowProc) 通过在窗口句柄上调用 DestroyWindow 来响应。
  • 无论您一直在推动哪些编辑,您都有询问XY Problems 的历史。可以肯定的是,这里也是如此。那么你最终想要完成什么?
  • @IInspectable,我只想安排关闭应用程序。我无法在无法释放之前创建的某些堆数据的函数内调用exit(0)。我会试试你提到的DestroyWindow ;)
  • 在调用exit(0) 之前不释放堆分配的内存不会改变一件事。你正在拆除一个进程。为什么要在拆房子之前清理干净?以及您打算如何进入目标进程,并“安排关闭应用程序”(无论是什么意思)。

标签: c++ c winapi


【解决方案1】:

您可以将 WINAPI SendMessageWM_CLOSE 一起用于 Msg 参数。

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

【讨论】:

    【解决方案2】:

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

    这是MSDN中的信号示例

    这里是如何发射SIGINT Here

    【讨论】:

    • 很难知道这个答案是关于什么的。都怎么了。站外链接?
    • 从您链接的 MSDN 页面:“任何 Win32 应用程序都不支持 SIGINT。”
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-01-31
    • 2018-05-28
    • 2023-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多