MFC-ダイアログボックス
この章では、ダイアログボックスについて説明します。Windows用のアプリケーションは、ダイアログボックスを介してユーザーと頻繁に通信します。CDialog classダイアログボックスを管理するためのインターフェイスを提供します。Visual C ++ダイアログエディタを使用すると、ダイアログボックスの設計とダイアログテンプレートリソースの作成が簡単になります。
ダイアログオブジェクトの作成は2段階の操作です-
ダイアログオブジェクトを作成します。
ダイアログウィンドウを作成します。
新しいWin32プロジェクトを作成して、簡単な例を見てみましょう。
Step 1 − Visual Studioを開き、[ファイル]→[新規]→[プロジェクト]メニューオプションをクリックします。
Step 2 − [新しいプロジェクト]ダイアログボックスが表示されます。

Step 3 −左側のペインから、[テンプレート]→[Visual C ++]→[Win32]を選択します。
Step 4 −中央のペインで、[Win32プロジェクト]を選択します。
Step 5−「名前」フィールドにプロジェクト名「MFCDialogDemo」を入力し、「OK」をクリックして続行します。次のダイアログが表示されます。

Step 6 − [次へ]をクリックします。

Step 7 −上記のダイアログボックスに表示されているオプションを選択し、[完了]をクリックします。

Step 8 −空のプロジェクトが作成されます。
Step 9 − MFCプロジェクトにするには、プロジェクトを右クリックして[プロパティ]を選択します。

Step 10 −左側のセクションで、[構成のプロパティ]→[一般]をクリックします。
Step 11 − [プロジェクトのデフォルト]セクションで[共有DLLでMFCを使用する]オプションを選択し、[OK]をクリックします。
Step 12 −新しいソースファイルを追加します。
Step 13 −プロジェクトを右クリックし、「追加」→「新規アイテム」を選択します。
Step 14 − [テンプレート]セクションで、[C ++ファイル(.cpp)]をクリックします。

Step 15 −名前を例として設定し、[追加]をクリックします。
Step 16 −アプリケーションを作成するには、クラスを追加して、MFCのCWinAppから派生させる必要があります。
#include <afxwin.h>
class CExample : public CWinApp {
public:
BOOL InitInstance();
};
ダイアログボックスの作成
Step 1 −ダイアログボックスを作成するには、ソリューションエクスプローラーで[リソースファイル]フォルダーを右クリックし、[追加]→[リソース]を選択します。

Step 2 − [リソースの追加]ダイアログボックスで、[ダイアログ]を選択し、[新規]をクリックします。
Step 3 −ダイアログボックスは、実際にプログラムで作成する前に、いくつかの準備が必要です。
Step 4 −ダイアログボックスは、最初にテキストファイル(リソースファイル内)として手動で作成できます。
Step 5 −リソースファイルの下に作成されたMFCDialogDemo.rcファイルが表示されます。

Step 6−リソースファイルがデザイナで開かれています。同じことがテキストファイルとして開くことができます。リソースファイルを右クリックして、[プログラムから開く]を選択します。

Step 7 −ソースコード(テキスト)エディタを選択し、[追加]ボタンをクリックします。

Step 8 −デザイナに戻り、ダイアログを右クリックして[プロパティ]を選択します。

Step 9 −多くのオプションから選択する必要があります。
Step 10−他のほとんどのコントロールと同様に、ダイアログボックスを識別する必要があります。ダイアログボックスの識別子(ID)は通常IDD_で始まります。IDをIDD_EXAMPLE_DLGに変更しましょう。
ダイアログの場所
ダイアログボックスは、アプリケーション上に「物理的に」配置する必要があります。ダイアログボックスは通常、他のコントロールの親として作成されるため、その場所は、親ウィンドウまたはデスクトップとの関係によって異なります。
[プロパティ]ウィンドウを見ると、XPosとYPosの2つのフィールドが表示されます。

Xは、モニターの左側の境界線からダイアログボックスの左側の境界線までの距離です。
Yは、モニターの上部の境界線からダイアログボックスの上部の境界線までの距離です。
デフォルトでは、これらのフィールドはゼロに設定されています。上記のように変更することもできます。
これらの2つの寸法を0として指定すると、ダイアログボックスの左側と上部の境界線が設定され、オブジェクトが画面の中央中央に表示されます。
ダイアログボックスの寸法
ダイアログボックスの寸法は、その幅と高さを示します。デザイナウィンドウでマウスを使用して、幅と高さのサイズを変更できます。

ステータスバーで幅と高さの変化を確認できます。
ダイアログボックスのメソッド
画面にダイアログボックスを表示するために使用される基本クラスはCDialogクラスです。ダイアログボックスを作成するには、CDialogからクラスを派生させる必要があります。CDialogクラス自体は、次の3つのコンストラクターを提供します。
CDialog();
CDialog(UINT nIDTemplate, CWnd* pParentWnd = NULL);
CDialog(LPCTSTR lpszTemplateName, CWnd* pParentWnd = NULL);
別のクラスCExampleDlgを作成し、CDialogから派生させましょう。次のコードに示すように、デフォルトのコンストラクタデストラクタを実装します。
class CExampleDlg : public CDialog {
public:
enum { IDD = IDD_EXAMPLE_DLG };
CExampleDlg();
~CExampleDlg();
};
CExampleDlg::CExampleDlg():CDialog(CExampleDlg::IDD) {
}
CExampleDlg::~CExampleDlg() {
}
次のコードに示すように、CExample :: InitInstance()メソッドでこのダイアログをインスタンス化する必要があります。
BOOL CExample::InitInstance() {
CExampleDlg myDlg;
m_pMainWnd = &myDlg;
return TRUE;
}
モーダルダイアログボックス
ダイアログボックスには2つのタイプがあります- modeless そして modal。モーダルダイアログボックスとモードレスダイアログボックスは、それらを作成および表示するために使用されるプロセスによって異なります。
モードレスダイアログボックス
モードレスダイアログボックスの場合、ダイアログクラスで独自のパブリックコンストラクタを提供する必要があります。
モードレスダイアログボックスを作成するには、パブリックコンストラクターを呼び出してから、ダイアログオブジェクトのCreateメンバー関数を呼び出してダイアログリソースをロードします。
Createは、コンストラクターの呼び出し中または呼び出し後に呼び出すことができます。ダイアログリソースのプロパティがWS_VISIBLEの場合、ダイアログボックスがすぐに表示されます。
そうでない場合は、そのShowWindowメンバー関数を呼び出す必要があります。
モーダルダイアログ
モーダルダイアログボックスを作成するには、CDialogで宣言されている2つのパブリックコンストラクターのいずれかを呼び出します。
次に、ダイアログオブジェクトを呼び出します DoModal ダイアログボックスを表示し、ユーザーが[OK]または[キャンセル]を選択するまでダイアログボックスとの対話を管理するメンバー関数。
DoModalによるこの管理は、ダイアログボックスをモーダルにするものです。モーダルダイアログボックスの場合、DoModalはダイアログリソースをロードします。
Step 1 −ダイアログボックスをモーダルとして表示するには、CExample :: InitInstance()イベントで、ダイアログ変数を使用してDoModal()メソッドを呼び出します。
BOOL CExample::InitInstance() {
CExampleDlg myDlg;
m_pMainWnd = &myDlg;
myDlg.DoModal();
return TRUE;
}
Step 2 −これがExample.cppファイルの完全な実装です。
#include <afxwin.h>
#include "resource.h"
class CExample : public CWinApp {
public:
BOOL InitInstance();
};
class CExampleDlg : public CDialog {
public:
enum { IDD = IDD_EXAMPLE_DLG };
CExampleDlg();
~CExampleDlg();
};
CExampleDlg::CExampleDlg():CDialog(CExampleDlg::IDD) {
}
CExampleDlg::~CExampleDlg() {
}
BOOL CExample::InitInstance() {
CExampleDlg myDlg;
m_pMainWnd = &myDlg;
myDlg.DoModal();
return TRUE;
}
CExample MyApp;
Step 3 −上記のコードをコンパイルして実行すると、次のダイアログボックスが表示されます。

ダイアログベースのアプリケーション
Microsoft Visual Studioは、主にダイアログボックスに基づくアプリケーションを作成するためのより簡単な方法を提供します。VisualStudioで利用可能なプロジェクトテンプレートを使用してダイアログベースプロジェクトを作成する手順は次のとおりです-
Step 1− Visual Studioを開き、[ファイル]→[新規]→[プロジェクト]メニューオプションをクリックします。[新しいプロジェクト]ダイアログボックスが表示されます。

Step 2 −左側のペインから、[テンプレート]→[Visual C ++]→[MFC]を選択します。
Step 3 −中央のペインで、[MFCアプリケーション]を選択します。
Step 4−「名前」フィールドにプロジェクト名「MFCModalDemo」を入力し、「OK」をクリックして続行します。次のダイアログボックスが表示されます。

Step 5 − [次へ]をクリックします。

Step 6 −上記のダイアログボックスに表示されているオプションを選択し、[次へ]をクリックします。

Step 7 − [ボックスの最大化]や[最小化]など、ダイアログボックスで選択したすべてのオプションをオンにして、[次へ]をクリックします。

Step 8 − [次へ]をクリックします。

Step 9−これら2つのクラスを生成します。クラスの名前を変更して、[完了]をクリックできます。
Step 10 −これで、MFCウィザードがこのダイアログボックスとプロジェクトファイルをデフォルトで作成することがわかります。

Step 11 −このアプリケーションを実行すると、次の出力が表示されます。
