MFC ActiveX コントロール : 高度なプロパティの実装
更新 : 2007 年 11 月
ここでは、ActiveX コントロールの高度なプロパティの実装に関する以下のトピックについて説明します。
読み取り専用プロパティと書き込み専用プロパティ
プロパティからのエラー コードのリターン
読み取り専用プロパティと書き込み専用プロパティ
プロパティ追加ウィザードを使うと、コントロールの読み取り専用プロパティや書き込み専用プロパティをすばやく簡単に実装できます。
読み取り専用プロパティまたは書き込み専用プロパティを実装するには
コントロールのプロジェクトを読み込みます。
[クラス ビュー] ウィンドウで、コントロールのライブラリ ノードを展開します。
コントロールのインターフェイス ノード (ライブラリ ノードの 2 番目のノード) を右クリックし、ショートカット メニューを開きます。
ショートカット メニューの [追加] をクリックし、[プロパティの追加] をクリックします。
これにより、プロパティ追加ウィザードが開きます。
[プロパティ名] ボックスにプロパティ名を入力します。
実装の種類として、[Get/Set メソッド] をクリックします。
[プロパティの種類] ボックスで、プロパティの種類を選択します。
読み取り専用プロパティを実装する場合は、Set 関数名を削除します。書き込み専用プロパティを実装する場合は、Get 関数名を削除します。
[完了] をクリックします。
上の手順を実行すると、プロパティ追加ウィザードによって、通常の 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 の場合には、プロパティが新しい値に設定されます。
プロパティからのエラー コードのリターン
プロパティの取得または設定のときにエラーが発生したことを通知するには、COleControl::ThrowError 関数を使用します。この関数は、ステータス コード (SCODE) をパラメータとして使用します。定義済みの SCODE を使用することも、SCODE を新たに定義することもできます。定義済みの SCODE の一覧およびカスタム SCODE の定義方法については、「MFC ActiveX コントロール : 高度なトピック」の「ActiveX コントロールにおけるエラー処理」を参照してください。
一般的な定義済みの SCODE には、COleControl::SetNotSupported、COleControl::GetNotSupported、COleControl::SetNotPermitted などのヘルパ関数があります。
メモ : |
---|
ThrowError は、プロパティの Get/Set 関数またはオートメーションのメソッドからエラーを返す場合だけに使用します。これ以外の場合、スタック上に適切な例外ハンドラは存在しません。 |
コードのほかの部分で発生した例外の報告については、「MFC ActiveX コントロール : 高度なトピック」の「COleControl::FireError」および「ActiveX コントロールにおけるエラー処理」を参照してください。