MFC ActiveX コントロール : カスタム プロパティの追加
カスタム プロパティは、ストック プロパティを使用してカスタム プロパティが COleControl のクラスで既に実装されていないとは異なります。カスタム プロパティがコントロールを使用するプログラミングに ActiveX コントロールを特定の状態または外観公開するために使用されます。
この技術情報、プロパティの追加ウィザードを使用して ActiveX コントロールにカスタム プロパティを追加する方法、および生成されたコード変更について説明します。ここでは、次の内容について説明します。
カスタム プロパティを追加するプロパティの追加ウィザードを使用して
カスタム プロパティのプロパティの追加ウィザードの変更
カスタム プロパティを実装するには次の 4 種類の二つの型: メンバー変数、通知のメンバー変数は、パラメーターで表される get 関数と set メソッド。
メンバー変数の実装
この実装は、コントロール クラスのメンバー変数としてプロパティの状態を表します。プロパティ値が変更されたかを確認する必要がある場合は、メンバー変数の実装を使用してください。3 種類の、この実装は、プロパティの最小限のサポート コードを作成します。メンバー変数の実装のディスパッチ マップ エントリ マクロは DISP_PROPERTYです。
通知の実装を持つメンバー変数
この実装は、プロパティの追加ウィザードが作成するメンバー変数と通知関数で構成されます。通知関数は、フレームワークによって自動的にプロパティ値が変更された後に呼び出されます。プロパティ値が変更された後に通知される必要があるときに通知の実装を持つメンバー変数を使用します。この実装は、関数呼び出しを必要とするため、多くの時間を必要とします。この実装のディスパッチ マップ エントリ マクロは DISP_PROPERTY_NOTIFYです。
設定とメソッドの実装を取得します。
この実装は、コントロール クラスのメンバー関数のペアで構成されます。get 関数と set メソッドの実装は自動的にプロパティが変更されると、コントロールのユーザーが要求するとコントロールのユーザーがプロパティと設定のメンバー関数の現在の値を要求すると取得のメンバー関数をダイヤルします。渡された値を検証するか、読み取りまたは書き込み専用プロパティをプロパティの値を実行時に計算するか、実際のプロパティを変更するには、コントロールのユーザーを実行する必要があるときにこの実装を使用してください。この実装のディスパッチ マップ エントリ マクロは DISP_PROPERTY_EXです。以降のセクションで、 カスタム プロパティを追加するプロパティの追加ウィザードを使用しては、この実装を示すために CircleOffset のカスタム プロパティを使用します。
パラメーター付きの実装
パラメーター付きの実装は、プロパティの追加ウィザードによってサポートされます。パラメーター化されたプロパティ (、プロパティの配列)は、コントロールの単一のプロパティを使用して複数の値にアクセスするために使用できます。この実装のディスパッチ マップ エントリ マクロは DISP_PROPERTY_PARAMです。この型の実装の詳細については、技術情報の ActiveX コントロールの パラメーター化されたプロパティの実装 を参照: 高度なトピック。
カスタム プロパティを追加するプロパティの追加ウィザードを使用して
次の手順では、カスタム プロパティ、 get 関数と set メソッドの実装を使用する CircleOffset を追加することを示します。CircleOffset のカスタム プロパティはコントロールのユーザーがコントロールの外接する四角形のセンターからの範囲をオフセットすることができます。実装を持つカスタム プロパティを以外の追加する手順は非常に似ています。 get または set メソッド。
このと同じ手順を使用する他のカスタム プロパティを追加することもできます。CircleOffset プロパティ名とパラメーターのカスタム プロパティの名前で置き換えます。
CircleOffset のカスタム プロパティをプロパティの追加ウィザードを追加するには
コントロール プロジェクトを読み込んでください。
クラス ビューで、コントロールのライブラリ ノードを展開します。
ショートカット メニューを開くには、コントロール (ライブラリ ノードの 2 番目のノード)のインターフェイス ノードを右クリックします。
ショートカット メニューのをクリック 追加 は、 プロパティの追加をクリックします。
これは プロパティ追加ウィザードを開きます。
プロパティ名(O),プロパティ名 ボックスで、型 CircleOffset。
Implementation Typeでは、をクリック Get/Set Methods。
プロパティの型,プロパティの種類,プロパティの種類(Y),プロパティ型 ボックスで、ボックス short。
get および集計関数の一意の名前を入力するか、既定の名前を受け入れます。
[完了] をクリックします。
カスタム プロパティのプロパティの追加ウィザードの変更
CircleOffset のカスタム プロパティを追加する場合は、プロパティの追加ウィザードでは、ヘッダーを変更します。コントロール クラスの H)と実装 (.cpp)ファイル。
次の行をに追加します。2 個の関数を宣言する H ファイルは GetCircleOffset と SetCircleOffsetを呼び出して:
SHORT GetCircleOffset(void);
void SetCircleOffset(SHORT newVal);
次の行はコントロールの .IDL ファイルに追加されます:
[id(2), helpstring("property CircleOffset")] SHORT CircleOffset;
[id(3), helpstring("property MyProperty")] SHORT MyProperty;
この行はプロパティの追加ウィザードのメソッドおよびプロパティの一覧のメソッドの場所から取得した特定の ID 番号 CircleOffset のプロパティに割り当てます。
さらに、コントロール 2 のハンドラー関数に CircleOffset のプロパティをマップするには、次の行はディスパッチ マップに (コントロール クラスの .cpp ファイル)に追加されます:
DISP_PROPERTY_EX_ID(CMyAxUICtrl, "CircleOffset", dispidCircleOffset, GetCircleOffset, SetCircleOffset, VT_I2)
最後に、 GetCircleOffset の実装と SetCircleOffset 関数は、コントロールの .cpp ファイルの末尾に追加されます。ほとんどの場合、プロパティの値を返す場合は、 Get 関数を変更します。集計関数は、通常、プロパティの変更前または後にも実行する必要があるコードが含まれています。
void CMyAxUICtrl::SetCircleOffset(SHORT /*newVal*/)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
// TODO: Add your property handler code here
SetModifiedFlag();
}
プロパティの追加ウィザードが集計関数の本体に、 SetModifiedFlagに、自動的に呼び出しを追加することに注意してください。この関数を呼び出すと、変更されたコントロールを示しています。コントロールが変更された場合、新しい状態はコンテナーを保存するときに格納されます。この関数は、コントロールの永続的な状態の一部として保存されるプロパティが値を変更するたびに呼び出す必要があります。