プロパティシートとは、アプリケーションの動作設定等を行うダイアログで、下図のように、 タブでページが選択出来るものが一般的です。
これをアプリケーションに組み込むのは簡単で、コンポーネントギャラリを使用します。
DevStudio で [挿入]-[コンポーネント...] で、コンポーネントギャラリのダイアログを表示し、
MicroSoft のタブから "プロパティシート" を選び、【挿入】ボタンを押します。
そうすると、プロパティシートにするか、Wizard にするかという確認ダイアログが出るので、
迷わずプロパティシートにして、【次に】を押します。(Wizard とは、このダイアログの様に、
次々に設定を行うダイアログのことです)
さらに、プレビューをサポートするか、モードレス/モーダルのどちらにするか等を次々に
尋ねてくるので、適当に(普通はそのまま)設定します。
最後に【完了】を押すとプロパティシートのクラス、各ページのクラス(×ページ数)、
各ページのダイアログリソース、プレビューを指定した場合はプレビューのクラスを生成してくれます。
後は、普通のダイアログとほぼ同じように取り扱うことが出来ます。
プロパティページを最初に作る時に、ページ数を指定しますが、そこは人間のやること、 後でページを増やしたいこともあるでしょう。そんな時は以下のようにします。
以下、簡単に説明します。
最後のページを CMyPropertyPage2、追加するページを CMyPropertyPage3 とする。
CMyPropertyPage2 の宣言部分をそっくりコピーし、クラス名を変更する。
リソースのIDも忘れないように変更する。
///////////////////////////////////////////////////////////////////////////// // CMyPropertyPage3 ダイアログ class CMyPropertyPage3 : public CPropertyPage { DECLARE_DYNCREATE(CMyPropertyPage3) // 構築 public: CMyPropertyPage3(); ~CMyPropertyPage3(); // ダイアログ データ //{{AFX_DATA(CMyPropertyPage3) enum { IDD = IDD_PROPPAGE3 }; // メモ - ClassWizard はこの位置にデータ メンバを追加します // この位置に生成されるコードを編集しないでください ! //}}AFX_DATA // オーバーライド // ClassWizard は仮想関数を生成しオーバーライドします //{{AFX_VIRTUAL(CMyPropertyPage3) protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV サポート //}}AFX_VIRTUAL // インプリメンテーション protected: // 生成されたメッセージ マップ関数 //{{AFX_MSG(CMyPropertyPage3) // メモ: ClassWizard はこの位置にメンバ関数を追加します //}}AFX_MSG DECLARE_MESSAGE_MAP() };
同様にクラスの実装部分も CMyPropertyPage2 のものをそっくりコピーし、クラス名を変更する。 IMPLEMENT_DYNCREATE も忘れないように、コピーし、名前を変更する。
IMPLEMENT_DYNCREATE(CMyPropertyPage3, CPropertyPage) ///////////////////////////////////////////////////////////////////////////// // CMyPropertyPage3 プロパティ ページ CMyPropertyPage3::CMyPropertyPage3() : CPropertyPage(CMyPropertyPage3::IDD) { //{{AFX_DATA_INIT(CMyPropertyPage3) // メモ: ClassWizard はこの位置にメンバの初期化処理を追加します //}}AFX_DATA_INIT } CMyPropertyPage3::~CMyPropertyPage3() { } void CMyPropertyPage3::DoDataExchange(CDataExchange* pDX) { CPropertyPage::DoDataExchange(pDX); //{{AFX_DATA_MAP(CMyPropertyPage3) // メモ: ClassWizard はこの位置に DDX と DDV の呼び出しコードを追加します //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CMyPropertyPage3, CPropertyPage) //{{AFX_MSG_MAP(CMyPropertyPage3) // メモ: ClassWizard はこの位置にメッセージ マップ マクロを追加します //}}AFX_MSG_MAP END_MESSAGE_MAP()
プロパティシートクラスのメンバ変数に、新しいページを加え、コンストラクタで新しいページを 生成するようにする。
class CMyPropertySheet : public CPropertySheet { .... CMyPropertyPage2 m_Page2; CMyPropertyPage3 m_Page3; ..... }; CMyPropertySheet::CMyPropertySheet(CWnd* pWndParent) : CPropertySheet(IDS_PROPSHT_CAPTION, pWndParent) { ..... AddPage(&m_Page2); AddPage(&m_Page3); }
クラスウィザードを開き、クラスの追加ボタンを押し、ファイルからを選ぶ。
ダイアログに新規ページのクラス名、ファイル名(参照ボタンを使うとよい)を入力し、OKボタンを押してクラスを登録する。
DevStudio で、リソースのダイアログを開き、ページ2をコピー&ペーストしページ3を作成する。
前のTips 次のTips 津田伸秀 のホームページに戻る。
Last Updated on 28-Aug-1996, Copyright (c) 1996 by Nobuhide Tsuda, All Right Reserved.
このホームページに関するご質問、ご要望、バグレポート等は
Nobuhide_Tsuda@jsn.justnet.or.jp
までメールをいただければ幸いです。