在运行时应用新样式后,我的应用程序的MainForm会创建一个新的窗口句柄 - 有没有办法停止此操作或重新分配句柄,因为我得到了一大堆以下错误:
'系统错误。代码:1400。无效的窗口句柄'
有没有办法操纵强制分配新句柄的过程?
我解决了这个问题:
我的主要表单创建了一个从未显示的看不见的'帮助'表单,但它确实有可视组件 - 它在尝试重绘这些可视组件时抛出了句柄错误,因此我用对象替换了相关组件(注意我最初没有写这段代码。)
答案 0 :(得分:5)
无法避免重新创建窗口句柄。相反,覆盖窗口的CreateWnd
和DestroyWnd
方法,以便在重新创建窗口时收到通知。
另外,避免对可能被破坏的窗口句柄保持持久引用。相反,每次需要时都要阅读Handle
属性。然后,您将不必注意通知。
请注意从不同的线程中读取Handle
,因为它可能导致窗口与错误的线程关联。将需要与VCL窗口交互的任何代码包装到您通过Synchronize
或Queue
调用的方法中。