子窗口可以知道何时移动父窗口吗?

Posted

技术标签:

【中文标题】子窗口可以知道何时移动父窗口吗?【英文标题】:Can a child window know when parent window is moved? 【发布时间】:2015-08-13 06:31:04 【问题描述】:

我开发了一个从第三方应用程序加载的 dll。 该应用程序没有向我提供 WM_SIZE、WM_MOVE 等任何事件。 我的 dll 显示一个窗口(对话框),它是主应用程序的子应用程序。 我希望每当主应用程序调整大小或移动时,我的窗口都应该移动。 我怎样才能做到这一点?正如我所说,主应用程序不提供任何 WM_SIZE 或 WM_MOVE 事件。 有没有办法使用应用程序句柄订阅应用程序的事件? 或者,在没有这些事件的情况下,子窗口是否可以知道主应用程序何时移动或调整大小?

【问题讨论】:

【参考方案1】:

如果窗口具有样式 WS_CHILD,则它在父窗口移动时永远不会收到 WM_MOVE 或 WM_SIZE 消息!

为什么要这样做?它的位置(相对于父级)和它的大小不会改变。此外,操作系统 Windows 会通过显示窗口部分来处理必须发生的任何重新绘制。

因此,当您说窗口应该与父窗口一起移动时,窗口不是父窗口的子窗口。 (样式 WS_CHILD)。使用 Spy++ 重新检查。或者,也许您只有一个自有窗口。 (你的问题不够详细)。

如果您有一个非 WS_CHILD 窗口并且您希望它与另一个窗口一起移动,您可以使用计时器重新检查另一个窗口是否移动。或者,如果窗口在同一个进程中,您可以子类化窗口并在父级收到 WM_SIZE/WM_MOVE 时将您自己的消息发布到您的窗口。

【讨论】:

根据您的建议,我使用 spy++ 检查了窗口。你是正确的,它不是一个子窗口,而是一个拥有的窗口。将其更改为子窗口后,它不需要知道应用程序是否调整大小或移动。它自己照顾。感谢您的帮助。

以上是关于子窗口可以知道何时移动父窗口吗?的主要内容,如果未能解决你的问题,请参考以下文章

如何在父窗口中运行子窗口

QT开发_弹出窗口禁用父窗口并移动到父窗口中心位置

如何在 PyQt5 中相对于父窗口移动子窗口?

如何在子窗口中移动父窗口?

iframe学习之父窗口的样式会影响子窗口吗?

Win32API:如何向父窗口请求嵌入式 Windows 事件通知