コモンダイアログのカスタマイズ

コモンダイアログとは、Windowsがあらかじめ用意したダイアログのことである。

左図はコモンダイアログの1つであるファイルダイアログであるが、よく見てみると標準のものとは少し違うことに気づくだろう。 ダイアログの最下部に、選択したファイルのフルパス名が表示されている。これは標準のコモンダイアログにはないものである。

以下に、このダイアログの作成方法を示す。


1.ダイアログベースのMFC AppWizard(exe)プロジェクトを作成する。ここではプロジェクト名をCustomCommonTestとする。

2.ダイアログリソースIDD_CUSTOMCOMMONTEST_DLGは右図のようにする。左のボタンのIDはIDC_BUTTON1とする。

3.新しいダイアログリソースIDD_DIALOG1を追加し、右図のようにレイアウトする。 ダイアログ上には読み取り専用のエディットボックスIDC_EDIT1を貼り付け、 ダイアログのプロパティでは[スタイル]を「チャイルド」、[境界線]を「なし」とし、 さらに「兄弟ウィンドウをクリップ」する。さらに[その他のスタイル]では「可視」「3D」「コントロール」をチェックする。

4.ClassWizardを使いダイアログIDD_DIALOG1のクラスを新規作成する。 クラス名は「CCustomFileDialog」とし、基本クラスを「CFileDialog」とする。

5.ClassWizardを使い、 CCustomCommonTestDlgクラスのIDC_BUTTON1オブジェクトのメッセージBN_CLICKEDに対するメッセージハンドラOnButton1を作成し、 CustomCommonTestDlg.cppファイルを以下のように書き換える。

	// ヘッダーファイルのインクルード
	#include "CustomFileDialog.h"

	void CCustomCommonTestDlg::OnButton1() 
	{
		// TODO: この位置にコントロール通知ハンドラ用のコードを追加してください
		CCustomFileDialog dlg(TRUE);
		dlg.DoModal();
	}
この時点でビルドし、ファイルを実行してみる。最初に表示されたダイアログで「Button1」ボタンを押すと、 標準のコモンファイルダイアログが表示されるはずである。

6.CustomFileDialog.cppファイルを開き、CCustomFileDialogクラスのコンストラクタを以下のようにする。
	CCustomFileDialog::CCustomFileDialog(BOOL bOpenFileDialog, LPCTSTR lpszDefExt, LPCTSTR lpszFileName,
		DWORD dwFlags, LPCTSTR lpszFilter, CWnd* pParentWnd) :
		CFileDialog(bOpenFileDialog, lpszDefExt, lpszFileName, dwFlags, lpszFilter, pParentWnd)
	{
		SetTemplate(0, IDD_DIALOG1);
	}
7.CFileDialogクラスのメンバ関数OnFileNameChangeをオーバーライドする。戻り値はvoid、引数はなし、 アクセス制御はprotectedでvirtualとして宣言すること。また、この関数の実装は以下のようにすること。
	// ヘッダーファイル内のクラス定義
	class CCustomFileDialog : public CFileDialog
	{
	・・・・・・
	protected:
		virtual void OnFileNameChange();
	};

	// ソースファイル
	void CCustomFileDialog::OnFileNameChange()
	{
		CEdit* pEdit = (CEdit*)GetDlgItem(IDC_EDIT1);
		pEdit->SetWindowText(GetPathName());
	}
最後にビルドして実行すると、最初の図のようにコモンファイルダイアログの一番下に選択したファイルのパスが表示される。

目次へ