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

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

この記事では、既に少なくとも 1 つのプロパティ ページがある ActiveX コントロールに新しいプロパティ ページを追加する方法について説明します。 ストック プロパティ ページ (フォント、画像、または色) の追加の詳細については、「MFC ActiveX コントロール: ストック プロパティ ページの使用」を参照してください。

次の手順では、ActiveX コントロール ウィザードによって作成されたサンプルの ActiveX コントロール フレームワークを使用します。 したがって、クラス名と識別子はこの例に固有です。

ActiveX コントロールでプロパティ ページを使用する方法の詳細については、次の記事を参照してください。

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

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

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

  3. [ダイアログ] ノードを展開し、[IDD_OLE_PROPPAGE_SMALL] を選択します。

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

  5. 新しいプロパティ ページ テンプレートを選択して、[プロパティ] ウィンドウ (リソース ビュー内) を更新します。

  6. [ID] プロパティに新しい値を入力します。 この例では、IDD_PROPPAGE_NEWPAGE を使用しています。

  7. ツール バーの [Save](保存) をクリックします。

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

  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 に増やす必要があることに注意してください。

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

次の手順では、新しいプロパティ ページの型名とキャプションを提供する 2 つの新しい文字列リソースを作成します。

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

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

  2. [文字列テーブル] フォルダーをダブルクリックし、文字列を追加する既存の文字列テーブル リソースをダブルクリックします。

    これにより、文字列テーブルを含むウィンドウが開きます。

  3. 文字列テーブルの末尾にある空白行を選択し、文字列のテキスト (キャプション) を入力します (例: "追加のプロパティ ページ")。

    これにより、[String Properties] (文字列のプロパティ) ページが開き、[キャプション] ボックスと [ID] ボックスが表示されます。 [キャプション] ボックスには、入力した文字列が含まれています。

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

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

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

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

    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_CAPTION が COlePropertyPage コンストラクターに渡されるようにします。

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

必要な変更を行った後、プロジェクトをリビルドし、テスト コンテナーを使用して新しいプロパティ ページをテストします。 Test Container にアクセスする方法について詳しくは、「 テスト コンテナーでのプロパティとイベントのテスト 」をご覧ください。

関連項目

MFC ActiveX コントロール