ダイアログを表示させるには?

解決


Mr.T  2003-11-26 15:14:13  No: 52618  IP: [192.*.*.*]

はじめまして。VC++を始めてまだ日が浅いんでわからないことがあります。
今、わからないのはアプリケーションを作る際にダイアログベース以外でアプリケーションを作ってその後にダイアログを付け加えた場合のダイアログの表示の仕方がわかりません。
たぶん簡単なことなんだろうけどまだ始めたばっかしなのでどこを触ればいいかもあんまり理解できてない状態なので優しく教えてもらえるとうれしいです

編集 削除
tetrapod  2003-11-26 16:57:11  No: 52619  IP: [192.*.*.*]

VC++ に付属のサンプル scribble を一通り読みましょう。

編集 削除
なーめ  2003-11-29 12:56:49  No: 52620  IP: [192.*.*.*]

ダイアログからダイアログを起動できますか。
たとえば、
CXXXDlg::OnOK()
{
   CYYYDlg dlg;
   dlg.DoModal();
}

どのようにしてダイアログを起動しますか?
 1. Console アプリから --> 一般にやめたほうがよいと思います。
 2. MDI/SDI アプリから 
 3. その他のプロジェクトから --> 初心者はやめましょう。
ということで、
 2-1. MDI/SDIのメニューから起動する方法

   (0) メニューリソースにダイアログ起動メニューを追加 (仮:IDM_POPUPDLG)
   (1) ワークスペースのリソースの Dialog にダイアログを作る。
   (2) ダイアログエディタのときに CTRL-W を押す
   (3) クラスウィザードが起動、CDialog 派生クラスを作る。
   (4) ダイアログを起動したいクラスに #include "XXXDlg.h" を追加。
   (5) (たとえば)CMainFrm でクラスウィザードを起動。
   (6) IDM_POPUPDLG のコマンドハンドラを追加。

CMainFrm::OnPopupDlg()
{
   CYYYDlg dlg;
   dlg.DoModal();
}

てなところですな。
モードレスダイアログ(ダイアログがアプリを占有しない)がいいというなら、

CMainFrm にメンバ変数
 
CXXXDlg * m_pXXXDlg;

を追加。
CMainFrm::OnPopupDlg()
{
   m_pXXXDlg = new CXXXDlg;   // コンストラクタに引数があったかも。
   m_pXXXDlg->Create();       // Create() に引数があったかも。
   m_pXXXDlg->ShowWindow(SW_SHOW); // これがないと表示されません。
}

それからモードレスダイアログで大事なことは。
ワークスペースのCXXXDlgクラスを右クリック、[仮想関数の追加]
で、PostNCDestroy() を追加。
void CXXXDlg::PostNcDestroy()
{
    CDialog::PostNcDestroy();
    delete this;  // <--- これを追加。(自動クリナップ処理)
}
これでウィンドウが不要になった(破棄された)とき、new されたメモリが解放されます。
なお、何度も表示したり消したりするなら、
DeleteWindow() するよりも
ShowWindow( SW_HIDE/SW_SHOW ) 
したほうがよいですよ。

  2-2. フレームウィンドウとともに起動する場合
  CMainFrm::Create() 
  にモードレスダイアログの生成を行えばよい。
  フレームウィンドウの消滅とともに自動的に消滅する(上記PostNCDestroy())。
  
  2-3.フレームウィンドウの生成前に1度だけ使う場合。
  CXXXApp::InitInstance() 
  で dlg.DoModal() すればよい。

こんなところかな。
≫VC++ に付属のサンプル scribble を一通り読みましょう。
そのとおりですね。
ヘルプ:目次:
    MSDNライブラリVisual Studio6.0
    L VisualC++ドキュメント
      L VisualC++ユーザーズガイド
        L VisualC++ チュートリアル
          L Scribble: MDI描画アプリケーション
            L ダイアログボックスの追加
以上。

編集 削除
Mr.T  2003-12-02 12:33:11  No: 52621  IP: [192.*.*.*]

ありがとうございました。
ダイアログ形式に変えて作ることにしました。
そしたらすぐに成功しました。
お二人ともありがとうございました

編集 削除