MFC ActiveX コントロール : カスタム プロパティ ページの追加
更新 : 2007 年 11 月
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) { }
変更を終えたら、プロジェクトをリビルドし、テスト コンテナを使って新しいプロパティ ページをテストします。テスト コンテナへのアクセス方法については、「テスト コンテナでのプロパティとイベントのテスト」を参照してください。