モードレスダイアログの表示について

解決


あいや  2009-01-26 11:22:41  No: 69498  IP: 192.*.*.*

お世話になります.環境は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);
}
としています.

編集 削除
subaru  2009-01-26 14:04:57  No: 69499  IP: 192.*.*.*

ダイアログのオーナーがビューになっているからです。
Createするときに親をデスクトップ(GetDesktopWindow)に
してみましょう。

編集 削除
あいや  2009-01-26 15:57:12  No: 69500  IP: 192.*.*.*

subaruさん、ありがとうございます。

CxxxViewクラスのOnLButtonDownハンドラ内で

   if( !m_pDlg->GetSafeHwnd() ) {
      m_pDlg->Create( GetDesktopWindow() );
//    m_pDlg->Create(this);
    }

とやったところ、うまくいきました。

編集 削除
あいや  2009-01-26 16:01:23  No: 69501  IP: 192.*.*.*

すみません.

↑ダイアログオブジェクト名が m_pDlg となっていますが,
m_pCmdlsの間違いです.

編集 削除
あいや  2009-01-26 18:59:45  No: 69502  IP: 192.*.*.*

またまた間違えて...orz

ダイアログオブジェクト名がm_pDlgとなっていますが,
m_pCmdlsの間違いです.
      ↓
ダイアログオブジェクトを指すポインタ名がm_pDlgとなっていますが,
m_pCmdlsの間違いです.

編集 削除