お世話になります.環境はXP, VS2008C++, MFCです.
ビュー画面上でマウスを左クリックすると,モードレス
ダイアログ画面が表示され,[OK]ボタンを押すと消える
ようなプログラムを作ったのですが,モードレスダイア
ログ画面が常に最前面に表示されてしまい,ビュー画面
を見たいときに邪魔になってしまいます.現在はモード
レスダイアログ画面のプロパティシートの[Minimize Box]
をtrueにして対処していますが,できれば
(1)ビュー画面をクリックすると,ビュー画面が前面に現れる.
(2)ビュー画面の背後に一部が現れているダイアログ画面を
クリックすると再びダイアログ画面が前面に現れる.
(3)ダイアログ画面がビュー画面の陰に完全に隠れているとき
は画面下のタスクバーにダイアログ画面のアイコンが表示
され,これをクリックするとダイアログ画面が前面に表示
される.
のようにしたいです.どのようにやればこうできるのか
アドバイスをお願いします.
なお,モードレスダイアログクラスをCmdlsとすると,
CxxxViewクラスのコンストラクタで
m_pCmdls = new Cmdls;
デストラクタで
delete m_pCmdls;
CxxxViewクラスのOnLButtonDownハンドラ内で
if( !m_pCmdls->GetSafeHwnd() ) {
m_pCmdls->Create(this);
}
m_pCmdls->ShowWindow(SW_SHOW);
CmdlsダイアログクラスのOnClose()ハンドラ内で
DestroyWindow();
//CDialog::OnClose();
また, CmdlsクラスのCreate関数は
Cmdls::Create(CWnd* pParent)
{
m_pParent=pParent;
return CDialog::Create(IDD_DIALOG1, pParent);
}
としています.
ダイアログのオーナーがビューになっているからです。
Createするときに親をデスクトップ(GetDesktopWindow)に
してみましょう。
subaruさん、ありがとうございます。
CxxxViewクラスのOnLButtonDownハンドラ内で
if( !m_pDlg->GetSafeHwnd() ) {
m_pDlg->Create( GetDesktopWindow() );
// m_pDlg->Create(this);
}
とやったところ、うまくいきました。
すみません.
↑ダイアログオブジェクト名が m_pDlg となっていますが,
m_pCmdlsの間違いです.
またまた間違えて...orz
ダイアログオブジェクト名がm_pDlgとなっていますが,
m_pCmdlsの間違いです.
↓
ダイアログオブジェクトを指すポインタ名がm_pDlgとなっていますが,
m_pCmdlsの間違いです.
ツイート | ![]() |