次の方法で共有


MFC ActiveX コントロール : 高度なプロパティの実装

この記事では、ActiveX コントロールでの高度なプロパティの実装に関するトピックを説明します。

重要

ActiveX は、新しい開発には使用すべきではないレガシ テクノロジです。 ActiveX に取って代わる最新のテクノロジの詳細については、「ActiveX コントロール」を参照してください。

Read-Only プロパティと Write-Only プロパティ

プロパティの追加ウィザードを使用すると、コントロールの read-only プロパティや write-only プロパティを素早く、簡単に実装できます。

read-only プロパティや write-only プロパティを実装するには

  1. コントロールのプロジェクトを読み込みます。

  2. [クラス ビュー] で、コントロールのライブラリ ノードを展開します。

  3. コントロールのインターフェイス ノード (ライブラリ ノードの 2 番目のノード) を右クリックし、ショートカット メニューを開きます。

  4. ショートカット メニューから、[追加][プロパティの追加] の順にクリックします。

    これにより、[プロパティの追加] ウィザードが開きます。

  5. [プロパティ名] ボックスに、プロパティの名前を入力します。

  6. [実装の種類] として、[Get/Set メソッド] をクリックします。

  7. [プロパティの種類] ボックスで、プロパティの適切な型を選択します。

  8. 読み取り専用プロパティが必要な場合は、Set 関数名をクリアしてください。 書き込み専用プロパティが必要な場合は、Get 関数名をクリアしてください。

  9. [完了] をクリックします。

これを行うと、プロパティの追加ウィザードによって、通常の Set 関数または Get 関数の代わりに、ディスパッチ マップ エントリに関数 SetNotSupported または GetNotSupported が挿入されます。

既存のプロパティを読み取り専用または書き込み専用に変更する場合は、ディスパッチ マップを手動で編集し、不要な Set または Get 関数をコントロール クラスから削除します。

プロパティを条件付きで読み取り専用または書き込み専用にする場合 (たとえば、コントロールが特定のモードで動作している場合のみなど)、Set または Get 関数を通常どおりに指定し、必要に応じて SetNotSupported または GetNotSupported 関数を呼び出します。 次に例を示します。

void CMyAxUICtrl::SetMyProperty(SHORT newVal)
{
   AFX_MANAGE_STATE(AfxGetStaticModuleState());

   if (m_bReadOnlyMode)   //  some control-specific state
   {
      SetNotSupported();
   }
   else
   {
      m_iPropVal = newVal;   //  set property as normal
      SetModifiedFlag();
   }
}

このコード サンプルでは、m_bReadOnlyMode データ メンバーが TRUE の場合に SetNotSupported を呼び出します。 FALSE の場合、プロパティは新しい値に設定されます。

プロパティからのエラー コードの返し

プロパティの get または set を試行しているときにエラーが発生したことを示すために COleControl::ThrowError 関数を使用します。この関数は、パラメーターとして SCODE (状態コード) を受け取ります。 定義済みの SCODE を使用することも、独自の SCODE を定義することもできます。 定義済みの SCODE の一覧と、カスタム SCODE を定義する手順については、ActiveX コントロールの高度なトピックに関するページの「ActiveX コントロールでのエラーの処理」を参照してください。

ヘルパー関数は、最も一般的な定義済みの SCODE (COleControl::SetNotSupportedCOleControl::GetNotSupportedCOleControl::SetNotPermitted など) 用に存在します。

Note

ThrowError は、プロパティの Get または Set 関数またはオートメーション メソッド内からエラーを返す手段としてのみ使用することを意図しています。 これらは、適切な例外ハンドラーがスタックに存在する唯一の時間です。

コードの他の領域での例外を報告する方法の詳細については、「COleControl:: FireError」と、ActiveX コントロールの高度なトピックに関するページの「ActiveX コントロールでのエラーの処理」を参照してください。

関連項目

MFC ActiveX コントロール
MFC ActiveX コントロール: プロパティ
MFC ActiveX コントロール: メソッド
COleControl クラス