MFC ActiveX コントロール : カスタム プロパティ ページの追加

更新 : 2007 年 11 月

ActiveX コントロールのプロパティの数が多すぎて 1 つのプロパティ ページには収まりきらない場合があります。このような場合は、ActiveX コントロールにプロパティ ページを追加すると、プロパティを表示できるようになります。

ここでは、既に 1 つ以上のプロパティ ページがある ActiveX コントロールに新しいプロパティ ページを追加する方法について説明します。ストック プロパティ ページ (フォント、ピクチャ、またはカラー) を追加する方法の詳細については、「MFC ActiveX コントロール : ストック プロパティ ページの使用」を参照してください。

次の手順では、ActiveX コントロール ウィザードで作成した ActiveX コントロール フレームワークのコードを使用します。したがって、クラス名と ID はこのコード専用です。

ActiveX コントロールのプロパティ ページの使い方については、次の項目を参照してください。

新しいプロパティ ページ テンプレートをプロジェクトに挿入するには

  1. コントロール プロジェクトが開いている状態で、プロジェクト ワークスペースの [リソース ビュー] を開きます。

  2. [リソース ビュー] で右クリックし、ショートカット メニューの [リソースの追加] をクリックします。

  3. [Dialog] ノードを展開し、[IDD_OLE_PROPPAGE_SMALL] を選択します。

  4. [新規作成] をクリックして、プロジェクトにリソースを追加します。

  5. 新しいプロパティ ページ テンプレートを選択して、[プロパティ] ウィンドウを最新表示します。

  6. [ID] ボックスに新しい値を入力します。この例では、「IDD_PROPPAGE_NEWPAGE」と入力します。

  7. ツール バーの [<ファイル名> の保存] をクリックします。

新しいテンプレートをクラスに関連付けるには

  1. [クラス ビュー] を開きます。

  2. [クラス ビュー] で右クリックして、ショートカット メニューを開きます。

  3. ショートカット メニューの [追加] をクリックし、さらに [クラスの追加] をクリックします。

    [クラスの追加] ダイアログ ボックスが表示されます。

  4. [MFC クラス] テンプレートをダブルクリックします。

  5. MFC クラス ウィザードの [クラス名] ボックスに、新しいダイアログ クラスの名前を入力します。この例では、「CAddtlPropPage」と入力します。

  6. ファイル名を変更する場合は、[変更] をクリックします。実装ファイルとヘッダー ファイルの名前を入力するか、または既定の名前をそのまま使用します。

  7. [基本クラス] ボックスで、[COlePropertyPage] を選択します。

  8. [ダイアログ ID]ボックスで、[IDD_PROPPAGE_NEWPAGE] を選択します。

  9. [完了] をクリックして、クラスを作成します。

コントロールのユーザーが新しいプロパティ ページにアクセスできるように、コントロールのプロパティ ページ ID マクロ セクションを次のように変更します。このマクロは、コントロールの実装ファイルにあります。

BEGIN_PROPPAGEIDS(CMyAxUICtrl, 2)
   PROPPAGEID(CMyAxUIPropPage::guid)
   PROPPAGEID(CAddtlPropPage::guid)
END_PROPPAGEIDS(CMyAxUICtrl)

BEGIN_PROPPAGEIDS マクロの 2 番目のパラメータ (プロパティ ページの数) を 1 から 2 に変更する必要があります。

また、コントロールの実装 (.CPP) ファイルを変更して、新しいプロパティ ページ クラスのヘッダー (.H) ファイルをインクルードする必要もあります。

次に、新しい文字列リソースを 2 つ作成して、新しいプロパティ ページの型名とキャプションを用意します。

プロパティ ページに新しい文字列リソースを追加するには

  1. コントロール プロジェクトが開いている状態で、[リソース ビュー] を開きます。

  2. [String Table] フォルダをダブルクリックし、文字列の追加先となる既存のストリング テーブル リソースをダブルクリックします。

    ウィンドウにストリング テーブルが表示されます。

  3. ストリング テーブルの末尾の空白行を選択し、文字列のテキストまたはキャプションを入力します。たとえば、「追加のプロパティ ページ」と入力します。

    [Caption] ボックスと [ID] ボックスを持つ [プロパティ] ページが表示されます。[Caption] ボックスには、先ほど入力した文字列が表示されます。

  4. [ID] ボックスで、入力した文字列の ID を選択するかまたは入力します。完了したら Enter キーを押します。

    この例では、新しいプロパティ ページの型名として IDS_SAMPLE_ADDPAGE を使用します。

  5. ID に IDS_SAMPLE_ADDPPG_CAPTION、キャプションに「追加のプロパティ ページ」を使って、手順 3 と 4 を繰り返します。

  6. 新しいプロパティ ページ クラス (この例では CAddtlPropPage) の .CPP ファイルで、CAddtlPropPage::CAddtlPropPageFactory::UpdateRegistry を次のように変更し、AfxOleRegisterPropertyPageClass によって IDS_SAMPLE_ADDPAGE が渡されるようにします。

    BOOL CAddtlPropPage::CAddtlPropPageFactory::UpdateRegistry(BOOL bRegister)
    {
       if (bRegister)
          return AfxOleRegisterPropertyPageClass(AfxGetInstanceHandle(),
             m_clsid, IDS_SAMPLE_ADDPAGE);
       else
          return AfxOleUnregisterClass(m_clsid, NULL);
    }
    
  7. CAddtlPropPage のコンストラクタを次のように変更し、IDS_SAMPLE_ADDPPG_CAPTIONCOlePropertyPage コンストラクタに渡されるようにします。

    CAddtlPropPage::CAddtlPropPage() :
       COlePropertyPage(IDD, IDS_SAMPLE_ADDPPG_CAPTION)
    {
    
    }
    

変更を終えたら、プロジェクトをリビルドし、テスト コンテナを使って新しいプロパティ ページをテストします。テスト コンテナへのアクセス方法については、「テスト コンテナでのプロパティとイベントのテスト」を参照してください。

参照

概念

MFC ActiveX コントロール