この記事では、ActiveX コントロールでの高度なプロパティの実装に関連するトピックについて説明します。
Von Bedeutung
ActiveX は、新しい開発には使用すべきではないレガシ テクノロジです。 ActiveX に代わる最新のテクノロジの詳細については、「 ActiveX コントロール」を参照してください。
Read-Only と Write-Only のプロパティ
プロパティの追加ウィザードを使用すると、コントロールの読み取り専用プロパティまたは書き込み専用プロパティをすばやく簡単に実装できます。
読み取り専用または書き込み専用のプロパティを実装するには
コントロールのプロジェクトを読み込みます。
クラス ビューで、コントロールのライブラリ ノードを展開します。
コントロールのインターフェイス ノード (ライブラリ ノードの 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();
}
}
このコード サンプルでは、SetNotSupported
データ メンバーが m_bReadOnlyMode
場合にを呼び出します。 FALSE の場合、プロパティは新しい値に設定されます。
プロパティからエラー コードを返す
プロパティの取得または設定中にエラーが発生したことを示すには、SCODE (状態コード) をパラメーターとして受け取る COleControl::ThrowError
関数を使用します。 定義済みの SCODE を使用することも、独自の SCODE を定義することもできます。 定義済みの SCODEs の一覧とカスタム SCOD を定義する手順については、「ActiveX コントロール: 高度なトピック」の 「ActiveX コントロールでのエラーの処理 」を参照してください。
COleControl::SetNotSupported、COleControl::GetNotSupported、COleControl::SetNotPermitted など、最も一般的な定義済み SCODE のヘルパー関数が存在します。
注
ThrowError
は、プロパティの Get または Set 関数またはオートメーション メソッド内からエラーを返す手段としてのみ使用されます。 これらは、適切な例外ハンドラーがスタックに存在する唯一の時間です。
コードの他の領域で例外を報告する方法の詳細については、「 COleControl::FireError 」および「ActiveX コントロール: 高度なトピック」の「 ActiveX コントロールでのエラーの処理 」セクションを参照してください。
こちらも参照ください
MFC ActiveX コントロール
MFC ActiveX コントロール: プロパティ
MFC ActiveX コントロール: メソッド
COleControl クラス