Mfc-dialog-boxes

提供:Dev Guides
移動先:案内検索

MFC-ダイアログボックス

この章では、ダイアログボックスについて説明します。 Windows用アプリケーションは、ダイアログボックスを介してユーザーと頻繁に通信します。 * CDialogクラス*は、ダイアログボックスを管理するためのインターフェイスを提供します。 Visual C ++ダイアログエディターを使用すると、ダイアログボックスを簡単に設計し、ダイアログテンプレートリソースを作成できます。

  • ダイアログオブジェクトの作成は2段階の操作です-
  • ダイアログオブジェクトを構築します。
  • ダイアログウィンドウを作成します。

新しいWin32プロジェクトを作成して、簡単な例を見てみましょう。

  • ステップ1 *-Visual Studioを開き、[ファイル]→[新規]→[プロジェクト]メニューオプションをクリックします。
  • ステップ2 *-[新しいプロジェクト]ダイアログボックスが表示されます。

新規プロジェクトダイアログボックス

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

MFCDialogDemoプロジェクト

  • ステップ6 *-[次へ]をクリックします。

MFCDialogDemo設定

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

MFCDialogDemoオプション

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

MFCDialogDemoプロパティ

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

MFCDialogDemoアイテムの追加

  • ステップ15 *-名前を例として設定し、[追加]をクリックします。
  • ステップ16 *-アプリケーションを作成するには、クラスを追加し、MFCのCWinAppから派生させる必要があります。
#include <afxwin.h>

class CExample : public CWinApp {
   public:
      BOOL InitInstance();
};

ダイアログボックスの作成

  • ステップ1 *-ダイアログボックスを作成するには、ソリューションエクスプローラーで[リソースファイル]フォルダーを右クリックし、[追加]→[リソース]を選択します。

リソースの追加

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

MFCDialogDemoファイル

  • ステップ6 *-リソースファイルはデザイナーで開いています。 同じファイルをテキストファイルとして開くことができます。 リソースファイルを右クリックして、[アプリケーションから開く]を選択します。

MFCDialogDemoファイルで開く

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

ソースコードエディター

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

ダイアログボックス選択プロパティ

  • ステップ9 *-多くのオプションから選択する必要があります。
  • ステップ10 *-他のほとんどのコントロールと同様に、ダイアログボックスを識別する必要があります。 通常、ダイアログボックスの識別子(ID)はIDD_で始まります。IDをIDD_EXAMPLE_DLGに変更します。

ダイアログの場所

ダイアログボックスは、アプリケーション上に「物理的に」配置する必要があります。 通常、ダイアログボックスは他のコントロールの親として作成されるため、その場所は親ウィンドウまたはデスクトップとの関係に依存します。

プロパティウィンドウを見ると、X PosとY Posの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;
}

モーダルダイアログボックス

ダイアログボックスには、 modelessmodal の2種類があります。 モーダルおよびモードレスダイアログボックスは、作成および表示に使用されるプロセスによって異なります。

モードレスダイアログボックス

  • モードレスダイアログボックスの場合、ダイアログクラスで独自のパブリックコンストラクターを提供する必要があります。
  • モードレスダイアログボックスを作成するには、パブリックコンストラクターを呼び出してから、ダイアログオブジェクトのCreateメンバー関数を呼び出してダイアログリソースを読み込みます。
  • コンストラクターの呼び出し中または呼び出し後にCreateを呼び出すことができます。 ダイアログリソースにプロパティWS_VISIBLEがある場合、ダイアログボックスがすぐに表示されます。
  • そうでない場合は、ShowWindowメンバー関数を呼び出す必要があります。

モーダルダイアログ

  • モーダルダイアログボックスを作成するには、CDialogで宣言されている2つのパブリックコンストラクターのいずれかを呼び出します。
  • 次に、ダイアログオブジェクトの DoModal メンバー関数を呼び出して、ダイアログボックスを表示し、ユーザーが[OK]または[キャンセル]を選択するまでダイアログボックスとの対話を管理します。
  • DoModalによるこの管理は、ダイアログボックスをモーダルにするものです。 モーダルダイアログボックスの場合、DoModalはダイアログリソースを読み込みます。
    *ステップ1 *-ダイアログボックスをモーダルとして表示するには、CExample
    InitInstance()イベントで、ダイアログ変数を使用してDoModal()メソッドを呼び出します-
BOOL CExample::InitInstance() {
   CExampleDlg myDlg;
   m_pMainWnd = &myDlg;
   myDlg.DoModal();
   return TRUE;
}
  • ステップ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;
  • ステップ3 *-上記のコードをコンパイルして実行すると、次のダイアログボックスが表示されます。

ダイアログボックス

ダイアログベースのアプリケーション

Microsoft Visual Studioは、主にダイアログボックスに基づくアプリケーションを作成する簡単な方法を提供します。 Visual Studioで利用可能なプロジェクトテンプレートを使用して、ダイアログベースのプロジェクトを作成する手順を次に示します-

  • ステップ1 *-Visual Studioを開き、[ファイル]→[新規]→[プロジェクト]メニューオプションをクリックします。 [新しいプロジェクト]ダイアログボックスが表示されます。

ダイアログベースのプロジェクトテンプレート

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

MFCModalDemo Application2

  • ステップ5 *-[次へ]をクリックします。

MFCModalDemoタイプ

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

MFCModalDemoアプリケーションオプション

  • ステップ7 *-ボックスの最大化や最小化など、ダイアログボックスで選択するオプションをすべてチェックし、[次へ]をクリックします。

MFCModalDemoの高度な機能

  • ステップ8 *-[次へ]をクリックします。

MFCModalDemo生成クラス

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

ダイアログボックスアプリケーション

  • ステップ11 *-このアプリケーションを実行すると、次の出力が表示されます。

MFCModalDemo結果