MFC ActiveX コントロール : カスタム プロパティ ページの追加
ActiveX コントロールのプロパティが多すぎて 1 つのプロパティ ページに合理的に収まりきらない場合があります。 その場合は、ActiveX コントロールにプロパティ ページを追加して、これらのプロパティを表示できます。
この記事では、既に少なくとも 1 つのプロパティ ページがある ActiveX コントロールに新しいプロパティ ページを追加する方法について説明します。 ストック プロパティ ページ (フォント、画像、または色) の追加の詳細については、「MFC ActiveX コントロール: ストック プロパティ ページの使用」を参照してください。
次の手順では、ActiveX コントロール ウィザードによって作成されたサンプルの ActiveX コントロール フレームワークを使用します。 したがって、クラス名と識別子はこの例に固有です。
ActiveX コントロールでプロパティ ページを使用する方法の詳細については、次の記事を参照してください。
MFC ActiveX コントロール: ストック プロパティ ページの使用
Note
新しいプロパティ ページは ActiveX コントロールのプロパティ ページのサイズ標準に準拠したものにすることを強くお勧めします。 ストック画像および色プロパティ ページは、250 x 62 ダイアログ単位 (DLU) です。 標準フォント プロパティ ページは 250 x 110 DLU です。 ActiveX コントロール ウィザードによって作成された既定のプロパティ ページでは、250 x 62 DLU 標準が使用されます。
新しいプロパティ ページ テンプレートをプロジェクトに挿入するには
コントロール プロジェクトを開いた状態で、プロジェクト ワークスペースでリソース ビューを開きます。
リソース ビュー内で右クリックしてショートカット メニューを開き、[リソースの追加] をクリックします。
[ダイアログ] ノードを展開し、[IDD_OLE_PROPPAGE_SMALL] を選択します。
[新規] をクリックして、リソースをプロジェクトに追加します。
新しいプロパティ ページ テンプレートを選択して、[プロパティ] ウィンドウ (リソース ビュー内) を更新します。
[ID] プロパティに新しい値を入力します。 この例では、IDD_PROPPAGE_NEWPAGE を使用しています。
ツール バーの [Save](保存) をクリックします。
新しいテンプレートをクラスに関連付けるには
クラス ビューを開きます。
クラス ビュー内で右クリックしてショートカット メニューを開きます。
ショートカット メニューの [追加] をクリックし、[クラスの追加] をクリックします。
これで [クラスの追加] ダイアログ ボックスが開きます。
[MFC クラス] テンプレートをダブルクリックします。
MFC クラス ウィザードの [クラス名] ボックスに、新しいダイアログ クラスの名前を入力します (この例では、
CAddtlPropPage
です)。ファイル名を変更する場合は、[変更] をクリックします。 実装ファイルとヘッダー ファイルの名前を入力するか、既定の名前を受け入れます。
[基底クラス] ボックスで、[
COlePropertyPage
] を選択します。[ダイアログ ID] ボックスで、[IDD_PROPPAGE_NEWPAGE] を選択します。
[終了] をクリックしてクラスを作成します。
コントロールのユーザーがこの新しいプロパティ ページにアクセスできるようにするため、コントロールのプロパティ ページの ID マクロ セクション (コントロール実装ファイルにあります) に次の変更を加えます。
BEGIN_PROPPAGEIDS(CMyAxUICtrl, 2)
PROPPAGEID(CMyAxUIPropPage::guid)
PROPPAGEID(CAddtlPropPage::guid)
END_PROPPAGEIDS(CMyAxUICtrl)
BEGIN_PROPPAGEIDS マクロの 2 番目のパラメーター (プロパティ ページ数) を 1 から 2 に増やす必要があることに注意してください。
また、新しいプロパティ ページ クラスのヘッダー (.H) ファイルを含むようにコントロール実装ファイル (.CPP) ファイルを変更する必要があります。
次の手順では、新しいプロパティ ページの型名とキャプションを提供する 2 つの新しい文字列リソースを作成します。
新しい文字列リソースをプロパティ ページに追加するには
コントロール プロジェクトを開いた状態で、リソース ビューを開きます。
[文字列テーブル] フォルダーをダブルクリックし、文字列を追加する既存の文字列テーブル リソースをダブルクリックします。
これにより、文字列テーブルを含むウィンドウが開きます。
文字列テーブルの末尾にある空白行を選択し、文字列のテキスト (キャプション) を入力します (例: "追加のプロパティ ページ")。
これにより、[String Properties] (文字列のプロパティ) ページが開き、[キャプション] ボックスと [ID] ボックスが表示されます。 [キャプション] ボックスには、入力した文字列が含まれています。
[ID] ボックスで、文字列の ID を選択または入力します。 完了したら、Enter キーを押します。
この例では、新しいプロパティ ページの型名に IDS_SAMPLE_ADDPAGE を使用しています。
手順 3 と 4 を繰り返して、ID に IDS_SAMPLE_ADDPPG_CAPTION を使用し、キャプションに "追加のプロパティ ページ" を使用します。
次の例のように、
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); }
次のように、
CAddtlPropPage
のコンストラクターを変更して、IDS_SAMPLE_ADDPPG_CAPTION がCOlePropertyPage
コンストラクターに渡されるようにします。CAddtlPropPage::CAddtlPropPage() : COlePropertyPage(IDD, IDS_SAMPLE_ADDPPG_CAPTION) { }
必要な変更を行った後、プロジェクトをリビルドし、テスト コンテナーを使用して新しいプロパティ ページをテストします。 Test Container にアクセスする方法について詳しくは、「 テスト コンテナーでのプロパティとイベントのテスト 」をご覧ください。