0

我的问题是,当 Word 已使用 Windows API 设置为该窗口的父级时,如何将属于我们的 win32 应用程序的窗口放置在 MS Word 中SetParent(HandleOfMyWindow, HandleOfWord)

我的问题的背景是,我们围绕一个系统构建了很多代码,我们在 Word 中安装了一个宏,当从功能区上的按钮启动时,它会向我们的应用程序发送一条消息,告诉它创建一个给定的窗口并显示它Word 里面。然后,此窗口可以通过将 Word 用作 OLE 自动化服务器将文本等插入 Word。多年来,这在大多数情况下都运行良好。它仍然是,但有时窗口显示在 Word 的可见区域之外。例如,它可以是 Word 右边缘右侧 900 像素。它通常可以通过使 Word 在多个监视器上非常宽来找到。问题仅存在于多显示器系统上。它通常受到我们的应用程序和 Word 在显示器上的放置方式的影响。它也可能受到设置为主监视器的监视器的影响。

我们的应用程序是使用 Delphi 创建标准的 win32 exe 制作的。在我们开始使用 VCL Styles 之后,问题可能会变得更糟。

我尝试使用 Windows API SetBounds 和 SetWindowPos 放置我们的窗口,仅使用窗体的顶部和左侧属性,以及其他一些东西。它只是永远不会在我认为我的代码告诉它的地方弹出。大多数时候它是可见的,一切都很好,但仍然在我设定的另一个位置。我只是可以找出放置它的任何系统。

然而,在写这篇文章时,我发现了一些可能相关的东西,但仍然没有解决方案:

  1. https://en.delphipraxis.net/topic/4882-a-big-and-very-strange-bug-with-high-dpi-vcl-style-and-form-constraints/
  2. 来自 SetParent 文档:“如果 hWndNewParent 和 hWndChild 在不同的 DPI 感知模式下运行,可能会出现意外行为或错误。”
4

0 回答 0