VB6 に組み込まれた従来の ActiveX グリッド コントロールがあります。使用シナリオの 1 つでは、WinAPI DeferWindowPos呼び出しによって提供される「キャッシュされたウィンドウの再描画」機能を使用して、PictureBox などの他の組み込みの VB6 コントロールと一緒にサイズを変更したいと考えています。この手法は、ActiveX を除くすべてのフォーム コントロールで魅力的に機能します。主な問題は、コントロールのサイズが期待どおりに変更されるが、その内容が再描画されないことです。つまり、有効サイズは変更されていません。
MS Spy++ ユーティリティは、コントロールのウィンドウが変更されたことを報告しますが、コントロールの幅または高さのネイティブ VB プロパティにアクセスすると、コントロールがまったくサイズ変更されていない場合と同じままです!
問題は、DeferWindowPos によって行われた変更を、カスタム ActiveX コントロールの VB の幅と高さのプロパティに反映する方法です。
考えられるアイデアの 1 つは、ActiveX 内で WM_WINDOWPOSCHANGING のような特別なネイティブ ウィンドウ メッセージを処理し、適切な UserControl.Extender メソッドまたはプロパティを呼び出す必要があるというものですが、この場合、実際には DeferWindowPos 呼び出しの利点が失われるようです。コントロールの古き良きVB6 Moveメソッドを呼び出します...