【问题标题】:Destroying child window without parent WIN32 APi在没有父 WIN32 APi 的情况下销毁子窗口
【发布时间】:2014-01-28 18:00:53
【问题描述】:

我有一个问题。我试图破坏子窗口,但它也破坏了父窗口,因此应用程序关闭。 我有这样的代码。

HWND cloneWin =FindWindowEx(hWnd, 0, szChildWin, 0);
        if (cloneWin) {
            MessageBox(NULL,"You are trying to create more than one child window\n Current child window will be destroyed", "Message", MB_OK|MB_ICONINFORMATION);
          DestroyWindow(cloneWin);
        }

怎么了? 提前谢了!

【问题讨论】:

    标签: winapi


    【解决方案1】:

    documentation 说:

    线程不能使用 DestroyWindow 来销毁由不同线程创建的窗口。

    由于您尝试使用FindWindowEx 查找这些窗口,因此很明显这些窗口是在不同的进程中创建的,更不用说不同的线程了。换句话说,您对DestroyWindow 的调用永远不会成功。很难知道为什么这会导致其他应用程序崩溃,但由于您不遵守规则,所以我认为任何事情都可能发生是合理的。

    我认为您可以向窗口发送WM_CLOSE 消息并希望它会通过调用DestroyWindow 来响应,这似乎是合理的。这将是对DestroyWindow 的有效调用,因为它将在创建窗口的线程上进行。但这一切都取决于其他窗口如何响应WM_CLOSE。

    【讨论】:

    • 谢谢回复,我刚试过 SendMessage(cloneWin,WM_CLOSE,0,0);但它也会破坏所有应用程序((
    • 猜你运气不好。你为什么不尝试一种不那么激进的方法。尽管如此,我相信我有你的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-19
    • 2012-09-19
    • 2011-06-25
    • 1970-01-01
    • 2017-01-09
    • 1970-01-01
    相关资源
    最近更新 更多