6

実行時に新しいスタイルを適用した後、私のアプリケーションの MainForm は新しいウィンドウ ハンドルを作成します。これを停止するか、ハンドルを再割り当てする方法はありますか?

'システムエラー。コード: 1400。無効なウィンドウ ハンドル'

新しいハンドルを強制的に割り当てるプロセスを操作する方法はありますか?

私はこれを次のようにして解決しました:

私のメイン フォームは、決して表示されない目に見えない「ヘルパー」フォームを作成しましたが、それにはビジュアル コンポーネントが含まれています。これらのビジュアル コンポーネントを再描画しようとしたときにハンドル エラーがスローされたため、代わりに関連するコンポーネントをオブジェクトに置き換えました (注はこのコードを最初に書いたわけではありません)。

4

1 に答える 1

6

ウィンドウ ハンドルの再作成を回避する方法はありません。CreateWnd代わりに、ウィンドウのメソッドとメソッドをオーバーライドしてDestroyWnd、ウィンドウが再作成されたときに通知されるようにします。

また、破棄される可能性のあるウィンドウのハンドルへの永続的な参照を保持しないようにします。代わりに、Handle必要になるたびにプロパティを読み取ります。その後、通知を監視する必要はありません。

Handleただし、ウィンドウが間違ったスレッドに関連付けられる可能性があるため、別のスレッドからの読み取りには注意してください。SynchronizeVCL ウィンドウと対話する必要があるコードを、またはを介し​​て呼び出すメソッドにラップしますQueue

于 2013-04-09T12:53:33.800 に答える