6

在运行时应用新样式后,我的应用程序的 MainForm 会创建一个新的窗口句柄 - 有没有办法停止此操作或重新分配句柄,因为我收到大量以下错误:

'系统错误。代码:1400。无效的窗口句柄'

有什么方法可以操纵强制分配新句柄的过程?

我通过以下方式解决了这个问题:

我的主窗体创建了一个从未显示的看不见的“帮助器”窗体,但它确实有可视组件 - 它在尝试重绘这些可视组件时抛出句柄错误,所以我用对象替换了相关组件(注意我最初没有编写此代码)。

4

1 回答 1

6

没有办法避免重新创建窗口句柄。相反,请覆盖您的窗口CreateWndDestroyWnd方法,以便在重新创建窗口时通知您。

此外,避免保持对可能被破坏的窗口句柄的持久引用。相反,请在Handle每次需要时阅读该属性。这样您就不必关注通知了。

但是,请注意从不同的线程读取Handle,因为它可能会导致窗口与错误的线程相关联。将需要与 VCL 窗口交互的任何代码包装到您通过Synchronize或调用的方法中Queue

于 2013-04-09T12:53:33.800 回答