カスタムのタブ付きスタイルコントロールがあり、タブをクリックしたときに関連するページを表示または非表示にすることで内部的に機能します。
タブをクリックしたときに発生する基本的な順序は次のとおりです。
- 関連するページを前面に表示
- 関連するページを表示します(適切なフラグを指定してSetWindowPosを呼び出します)
- カバーしたばかりの古いページを非表示にする
- ウィンドウを塗り直します
一部のタブはDirectXでレンダリングされます。Windows XPでは、すべてが正常に機能し、タブを切り替えてもちらつきはありません。ただし、Windows 7(またはVista)では、手順2でSetWindowPosを呼び出すとウィンドウが再描画され、手順4の前に初期化されていないピクセルが点滅します。通常、アプリの実行が開始される前にデスクトップにあったものは何でもかまいません。
これはDirectXページでのみ発生しますが、これを引き起こすのはDirectXについてはわかりません。ページ間には他にも違いがあり、それは明らかなパターンでした。これが本当の手がかりなのか、赤いニシンなのかはわかりません。
GDIページはステップ4まで再描画されません。コードをステップスルーして確認しました。DWMがステップ2で正しくキャッシュされたビットマップを使用しているだけでなく、実際にはステップ4まで再描画されません。
これが背景情報ですが、現時点ではこの特定の問題に取り組む方法がわからないため、私の質問はより一般的です。
SetWindowPosが再描画するかどうかの決定に影響を与える可能性のあるすべてのものは何ですか?