Tips5 プロパティシート

前のTips 次のTips


■ プロパティシートの新規作成

 プロパティシートとは、アプリケーションの動作設定等を行うダイアログで、下図のように、 タブでページが選択出来るものが一般的です。

 これをアプリケーションに組み込むのは簡単で、コンポーネントギャラリを使用します。
 DevStudio で [挿入]-[コンポーネント...] で、コンポーネントギャラリのダイアログを表示し、 MicroSoft のタブから "プロパティシート" を選び、【挿入】ボタンを押します。
 そうすると、プロパティシートにするか、Wizard にするかという確認ダイアログが出るので、 迷わずプロパティシートにして、【次に】を押します。(Wizard とは、このダイアログの様に、 次々に設定を行うダイアログのことです)
 さらに、プレビューをサポートするか、モードレス/モーダルのどちらにするか等を次々に 尋ねてくるので、適当に(普通はそのまま)設定します。
 最後に【完了】を押すとプロパティシートのクラス、各ページのクラス(×ページ数)、 各ページのダイアログリソース、プレビューを指定した場合はプレビューのクラスを生成してくれます。

 後は、普通のダイアログとほぼ同じように取り扱うことが出来ます。

■ 後でページを追加する

 プロパティページを最初に作る時に、ページ数を指定しますが、そこは人間のやること、 後でページを増やしたいこともあるでしょう。そんな時は以下のようにします。

  1. 新しいページのクラスを定義する。
  2. 新しいページのクラスを実装する。
  3. 新しいページをプロパティシートに入れる。
  4. クラスウィザードにクラスを追加する。
  5. 新しいページのリソースを作成する。

以下、簡単に説明します。

  1. 新しいページのクラスを定義する。

     最後のページを 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()
    
    };
    

  2. 新しいページのクラスを実装する。

     同様にクラスの実装部分も 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()
    

  3. 新しいページをプロパティシートに入れる。

     プロパティシートクラスのメンバ変数に、新しいページを加え、コンストラクタで新しいページを 生成するようにする。

    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);
    }
    
    

  4. クラスウィザードにクラスを追加する。

     クラスウィザードを開き、クラスの追加ボタンを押し、ファイルからを選ぶ。
     ダイアログに新規ページのクラス名、ファイル名(参照ボタンを使うとよい)を入力し、OKボタンを押してクラスを登録する。

  5. 新しいページのリソースを作成する。

     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  までメールをいただければ幸いです。