次の方法で共有


CDialog クラス

画面上にダイアログ ボックスを表示するための基本クラスです。

class CDialog : public CWnd

解説

ダイアログ ボックスの 2 つの種類があります。モーダルおよびモードレス。 モーダル ダイアログ ボックスは、ユーザーがダイアログ ボックスを閉じない限り、アプリケーションを続行できません。 モードレス ダイアログ ボックスを使うと、ユーザーはダイアログ ボックスを表示したままで別のタスクに戻ることができます。ダイアログ ボックスはキャンセルも消去もされません。

CDialog オブジェクトは、ダイアログ テンプレートと CDialog からの派生クラスを組み合わせたものです。 ダイアログ エディターを使って、ダイアログ テンプレートを作成し、リソースに格納します。その後、クラスの追加ウィザードを使って、CDialog からの派生クラスを作成します。

ダイアログ ボックスは、ほかのウィンドウと同じように Windows からメッセージを受け取ります。 ダイアログ ボックス コントロールからの通知メッセージの処理方法に応じて、ユーザーとダイアログ ボックス間の対話方法が決まります。 [プロパティ] ウィンドウで処理対象のメッセージを選択すると、適切なメッセージ マップ エントリとメッセージ ハンドラー メンバー関数がクラスに追加されます。 アプリケーション作成者は、アプリケーション固有のメッセージ ハンドラー メンバー関数を記述するだけです。

メッセージ マップ エントリとメンバー関数を手動で書き込むこともできます。

多くのダイアログ ボックスでは、ダイアログ ボックス コントロールに入力したデータを格納するため、またはデータを表示するためのメンバー変数を派生ダイアログ クラスに追加します。 変数の追加ウィザードを使ってメンバー変数を作成し、コントロールに関連付けることができます。 同時に、変数の型や変数の値の範囲も選択できます。 コード ウィザードは、定義した派生ダイアログ クラスにメンバー変数を追加します。

メンバー変数とダイアログ ボックス コントロール間のデータ交換を自動的に処理するためのデータ マップが生成されます。 データ マップは、ダイアログ ボックスのコントロールを適切な値で初期化したり、データを取得したり、データの妥当性をチェックしたりするための関数が用意されています。

モーダル ダイアログ ボックスを作成するには、まず派生ダイアログ クラスのコンストラクターを使ってスタック上にオブジェクトを構築します。その後 DoModal 関数を呼び出して、ダイアログ ウィンドウとコントロールを作成します。 モードレス ダイアログを作成するには、ダイアログ クラスのコンストラクターの中から Create 関数を呼び出します。

Windows SDK に記述されている、DLGTEMPLATE データ構造体を使ってメモリ上にテンプレートを作成することもできます。 CDialog オブジェクトを構築すると、CreateIndirect を呼び出してモードレス ダイアログ ボックスを作成できます。InitModalIndirectDoModal を呼び出すと、モーダル ダイアログ ボックスを作成できます。

新しいダイアログ クラスに追加した CWnd::DoDataExchange のオーバーライドに、データの交換および妥当性検査のためのデータ マップが作成されます。 データの交換および妥当性検査の機能の詳細については、「CWnd」の DoDataExchange メンバー関数を参照してください。

プログラマもフレームワークも CWnd::UpdateData 関数を呼び出すことによって、間接的に DoDataExchange を呼び出します。

ユーザーが [OK] をクリックしてモーダル ダイアログ ボックスを閉じると、フレームワークが、UpdateData 関数を呼び出します。 [キャンセル] がクリックされたときは、データは取得されません。OnInitDialog の既定の実装でも、コントロールに初期値を設定するときに UpdateData を呼び出します。 通常は、OnInitDialog をオーバーライドして、ダイアログ ボックスのコントロールを初期化します。 OnInitDialog は、すべてのダイアログ コントロールが作成された後、ダイアログ ボックスが表示される直前に呼び出されます。

CWnd::UpdateData は、モーダル ダイアログ ボックスまたはモードレス ダイアログ ボックスが実行されている間はいつでも呼び出すことができます。

Visual C++ に組み込まれているツールを使わずにダイアログ ボックスを直接作成するには、自分自身で派生したダイアログ ボックス クラスにメンバー変数を追加し、その変数の値を設定したり、取得したりするメンバー関数を追加する必要があります。

モーダル ダイアログ ボックスは、ユーザーが [OK] または [キャンセル] をクリックするか、EndDialog メンバー関数を呼び出すようにプログラミングされていると、自動的に閉じます。

モードレス ダイアログ ボックスを実装するときは、必ず OnCancel メンバー関数をオーバーライドし、その中から DestroyWindow を呼び出します。 基本クラスの CDialog::OnCancel を呼び出さないでください。この関数は EndDialog を呼び出すため、ダイアログ ボックスは破棄されず、非表示になるだけです。 モードレス ダイアログ ボックスは通常 new を使って割り当てられるため、this を消去するようにモードレス ダイアログ ボックスの PostNcDestroy もオーバーライドする必要があります。 モーダル ダイアログ ボックスは通常フレーム上に構築されるので、PostNcDestroy による後処理は必要ありません。

CDialog の詳細については、以下のトピックを参照してください。

  • ダイアログ ボックス

  • 「サポート技術情報」(knowledge Base) の記事 Q262954:[HOWTO]:スクロール バーのサイズ変更] ダイアログ ボックスを作成します。

必要条件

**ヘッダー:**afxwin.h

参照

処理手順

DLGCBR32 サンプル:ダイアログ ボックスへのツールバーとステータス バーの追加を示します

DLGTEMPL サンプル:ダイアログ テンプレートを動的に作成します。

参照

CWnd クラス

階層図

その他の技術情報

CDialog のメンバー