MFC ActiveX コントロール : カスタム プロパティ ページの追加
ActiveX コントロールのプロパティの数が多すぎて 1 つのプロパティ ページには収まりきらない場合があります。 このような場合は、ActiveX コントロールにプロパティ ページを追加すると、プロパティを表示できるようになります。
ここでは、既に 1 つ以上のプロパティ ページがある ActiveX コントロールに新しいプロパティ ページを追加する方法について説明します。 ストック プロパティを追加する方法についてのページ (フォント、画像、または色) 記事を参照してくださいMFC ActiveX コントロール:ストック プロパティ ページを使用して。
次の手順では、ActiveX コントロール ウィザードで作成した ActiveX コントロール フレームワークのコードを使用します。 したがって、クラス名と ID はこのコード専用です。
ActiveX コントロールのプロパティ ページの使い方については、次の項目を参照してください。
MFC ActiveX コントロール:ストック プロパティ ページを使用してください。
注意
新しく作成するプロパティ ページは、ActiveX コントロールのプロパティ ページの標準サイズに合わせるようにしてください。 ピクチャとカラーのストック プロパティ ページのサイズは、250x62 ダイアログ単位 (DLU: dialog unit) です。 標準のフォント プロパティ ページは、250x110 DLU です。 ActiveX コントロール ウィザードで作成した既定のプロパティ ページは、250x62 DLU になります。
新しいプロパティ ページ テンプレートをプロジェクトに挿入するには
コントロール プロジェクトが開いている状態で、プロジェクト ワークスペースの [リソース ビュー] を開きます。
[リソース ビュー] で右クリックし、ショートカット メニューの [リソースの追加] をクリックします。
[Dialog] ノードを展開し、[IDD_OLE_PROPPAGE_SMALL] を選択します。
[新規作成] をクリックして、プロジェクトにリソースを追加します。
新しいプロパティ ページ テンプレートを選択して、[プロパティ] ウィンドウを最新表示します。
[ID] ボックスに新しい値を入力します。 この例では、「IDD_PROPPAGE_NEWPAGE」と入力します。
ツール バーの [<ファイル名> の保存] をクリックします。
新しいテンプレートをクラスに関連付けるには
[クラス ビュー] を開きます。
[クラス ビュー] で右クリックして、ショートカット メニューを開きます。
ショートカット メニューの [追加] をクリックし、さらに [クラスの追加] をクリックします。
[クラスの追加] ダイアログ ボックスが表示されます。
[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 に変更する必要があります。
また、コントロールの実装 (.CPP) ファイルを変更して、新しいプロパティ ページ クラスのヘッダー (.H) ファイルをインクルードする必要もあります。
次に、新しい文字列リソースを 2 つ作成して、新しいプロパティ ページの型名とキャプションを用意します。
プロパティ ページに新しい文字列リソースを追加するには
コントロール プロジェクトが開いている状態で、[リソース ビュー] を開きます。
[String Table] フォルダーをダブルクリックし、文字列の追加先となる既存のストリング テーブル リソースをダブルクリックします。
ウィンドウにストリング テーブルが表示されます。
文字列テーブルの最後に空白の行を選択し、テキスト、またはキャプションを文字列の入力します。たとえば、追加プロパティ ページ。
[Caption] ボックスと [ID] ボックスを持つ [プロパティ] ページが表示されます。 [Caption] ボックスには、先ほど入力した文字列が表示されます。
[ID] ボックスで、入力した文字列の ID を選択するかまたは入力します。 完了したら Enter キーを押します。
この例では、新しいプロパティ ページの型名として IDS_SAMPLE_ADDPAGE を使用します。
ID に IDS_SAMPLE_ADDPPG_CAPTION、キャプションに「追加のプロパティ ページ」を使って、手順 3 と 4 を繰り返します。
新しいプロパティ ページ クラス (この例では 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); }
CAddtlPropPage のコンストラクターを次のように変更し、IDS_SAMPLE_ADDPPG_CAPTION が COlePropertyPage コンストラクターに渡されるようにします。
CAddtlPropPage::CAddtlPropPage() : COlePropertyPage(IDD, IDS_SAMPLE_ADDPPG_CAPTION) { }
変更を終えたら、プロジェクトをリビルドし、テスト コンテナーを使って新しいプロパティ ページをテストします。 テスト コンテナーへのアクセス方法については、「テスト コンテナーでのプロパティとイベントのテスト」を参照してください。