古き良きMFCダイアログベースのアプリケーションのinsdeを使用したかっただけで、さらに2つの可動ダイアログを子として使用したかっただけです。ソリューション ウィザードの後、デフォルト ダイアログ リソース (子スタイル) を作成し、メイン ダイアログの OnInitDialog に 2 つのダイアログを作成しました。
m_P1 = new CMyDlg();
m_P2 = new CMyDlg();
m_P1->Create(IDD_DIALOG1, this);
m_P2->Create(IDD_DIALOG1, this);
m_P1->ShowWindow(SW_SHOWNORMAL);
m_P2->ShowWindow(SW_SHOWNORMAL);
現在、それらは両方とも表示されますが、それらを移動してもクライアント領域の再描画は行われません。両方の Windows をオーバーラップさせ、システム バーの後ろにあるものを選択して移動を開始すると、クライアント領域にはまだ更新されていない領域があるため、2 番目に重なっているダイアログの内容を表示します。
OnPaint を上書きして、そこで四角形を無効にしようとしましたが、両方のダイアログが同じクラスであるため、両方のダイアログが OnPaint を取得し、両方ともクライアント領域全体を更新するため、多くのちらつきが発生します。
ON_WM_ACTIVATE() や ON_WM_SETFOCUS() を使ってクライアント領域を一度だけ無効化しようとしたのですが、これらのイベントがまったく呼び出されません。
では、移動可能な子ダイアログを作成して、ドラッグするとクライアント領域が適切に更新され、選択後に最前面に表示される正しい方法は何でしょうか?
助けてくれてありがとう
ステファン