まずはダイアログベースのアプリで・・・4.新たなダイアログを呼び出す


■ 基本ダイアログの作成とボタンの配置
今回は、新たにダイアログのアプリケーションを作成することにします。プロジェクト名は"dlgtest2"にします。
詳細は、ダイアログの編集を参照してください。
以前と同様に、アプリケーション作成後、最初から表示されているスタティックテキストを消して、中央にボタンを一つ作成します。外観は以下のようになります。ボタンのコントロールIDはデフォルトのIDC_BUTTON1のままで良いです。
■ 新しいダイアログを作る
このメインのダイアログを保存してから閉じます。
次に、ResourceView上でダイアログの項目を右クリックし、[Dialogの挿入]を選択します。すると自動的に、IDD_DIALOG1というIDで新しいダイアログが作成され、ダイアログエディターが表示されます。(右図)
つぎに、IDD_DIALOG1を他のIDに変更して見ましょう。このままでも良いのですが、分かりやすくするために変更してみます。まず、ResourceView上のIDD_DIALOG1をマウスで右クリックします。ダイアログプロパティが表示されるのでこの中のIDを変更します。ここでは、IDD_SUBDLGとします。
ダイアログの編集ですが、新しく作成したダイアログは、最初から[OK]と[キャンセル]ボタンが配置されています。ここでは、何も変更しないで保存後、ダイアログエディターを終了しましょう。
■ 新しいダイアログのクラスを作成する
前項では、ダイアログのリソースを作成しましたが、ここではこのリソースに対応するダイアログのクラスを作成します。
まず、メニュー[挿入]の下の[クラスの新規作成]を選択してください。クラスの新規作成ダイアログが表示されます。
まず、クラス名を入力します。(ここでは、CSubdlgとします。)するとファイル名に最初のCがとれたSubdlg.cppという名前が自動的に入力されます。変更ボタンでこの名前を変えられますがここではそのまま使用します。
ちなみに、ここで既存のファイル名を指定すると既存のファイルにクラスを追加することができます。
次に基本クラスのプルダウンメニューからCDialogを指定します。ダイアログIDがIDD_SUBDLGになっていることを確認して[OK]で完了します。CLassViewにCSubdlgが追加されましたね。
■ メインのダイアログから新しいダイアログを呼出す
いよいよ、本題です。前項で作成した新しいダイアログをメインダイアログのボタンを押すことにより呼び出します。
まず、dlgtest2dlg.cppを開き、IDC_BUTTON1のボタン処理を追加します。やり方は、2.クラスの編集のページの[メンバ関数の追加]の項目を見てください。ここでは関数名はOnButton1です。
次にdlgtest2dlg.cppの初めのインクルードファイルの指定の部分に前項で作成した、"Subdlg.h"を追加します。
#include "stdafx.h"
#include "dlgtest2.h"
#include "dlgtest2Dlg.h"
#include "Subdlg.h"
最後に、ボタンの処理の編集です。
OnButton1を以下のように編集します。
void CDlgtest2Dlg::OnButton1() 
{
        // TODO: この位置にコントロール通知ハンドラ用のコードを追加してください
        CSubdlg         dlg;
        int             ret;
        ret = dlg.DoModal();
}
DoModal関数でダイアログを表示し、そのダイアログが閉じられるまでここで待ちます。
返り値retには、IDOK(OKボタン)か、IDCANCEL(キャンセルボタン)が入ります。
これで、完了です。
ビルドして実行してみてください。下図のようになれば成功です。
■ サンプルプロジェクトファイルのダウンロード
(VC++6.0プロジェクトファイル15KB)