私はダイアログベースのMFC C++アプリケーションを持っています。私のダイアログには、いくつかの「ページ」(タブページやプロパティダイアログボックスに似ています)が表示されます。Vistaでの子ウィンドウペインティングの問題
親のクライアント領域の上に子ウィンドウを表示することによって、各 "ページ"を表示します。私は子供の上に別のウィンドウを開くまでこれはVista上で正常に動作します。
Vistaは、親ページの枠内に、「ページ」の子ウィンドウの上にペイントする太い白い矩形の枠を描いているようです。この白い矩形の上に別のウィンドウを移動すると、隠蔽された領域がちょうど良い状態に再描画されます。
誰かが何が起こっているか教えていただけますか? Vistaはおそらく不正な座標を使って非クライアント(フレーム)領域をクリアしようとしていますか?
私の親ダイアログは、自分のウィンドウタイトルバーとフレームのペイントを処理するCDialogから派生したスキンクラスです。私は自分のOnNcActivate()メソッド内でCDialog :: OnNcActivate()を呼び出さないと、白い四角形が表示されないことが分かりました。もちろん、私はこれを行うと私の子供の窓を使用することはできません..しかし、OnNcActivateは問題に関連しているようです。
私は問題を理解しました。私はCDialog :: OnNcActivate()を呼び出すべきではありません。代わりにTRUEを返すべきでした。すべてうまくいきました。 – SparkyNZ