MFC ActiveX コントロール : ストック プロパティの追加
ストック プロパティは、COleControl
クラスによって既に実装されているという点で、カスタム プロパティとは異なります。 COleControl
には、コントロールの共通プロパティをサポートする定義済みのメンバー関数が含まれています。 共通プロパティの中には、コントロールのキャプション、前景色、背景色を含むものもあります。 その他のストック プロパティについては、この記事で後述する「[プロパティの追加] ウィザードでサポートされるストック プロパティ」を参照してください。 ストック プロパティのディスパッチ マップ エントリの先頭には常に DISP_STOCKPROP が付けられます。
この記事では、[プロパティの追加] ウィザードを使用してストック プロパティ (この場合は Caption) を ActiveX コントロールに追加する方法と、その結果として行われるコード変更について説明します。 ここでは、次の内容について説明します。
-
Note
Visual Basic カスタム コントロールには、通常、Top、Left、Width、Height、Align、Tag、Name、TabIndex、TabStop、Parent などのプロパティが用意されています。 ただし、これらのコントロール プロパティは、ActiveX コントロール コンテナーによって実装されます。そのため、ActiveX コントロールではこれらのプロパティはサポートされません。
[プロパティの追加] ウィザードを使用してストック プロパティを追加する
ストック プロパティを追加するためのコードは、カスタム プロパティを追加するよりも少なくて済みます。これは、プロパティのサポートが COleControl
によって自動的に処理されるためです。 次の手順は、ストック Caption プロパティを ActiveX コントロール フレームワークに追加する方法を示したものであり、その他のストック プロパティを追加する場合にも使用できます。 選択したストック プロパティ名を Caption に置き換えます。
[プロパティの追加] ウィザードを使用してストック Caption プロパティを追加するには
コントロールのプロジェクトを読み込みます。
[クラス ビュー] で、コントロールのライブラリ ノードを展開します。
コントロールのインターフェイス ノード (ライブラリ ノードの 2 番目のノード) を右クリックし、ショートカット メニューを開きます。
ショートカット メニューから、[追加]、[プロパティの追加] の順にクリックします。
これにより、[プロパティの追加] ウィザードが開きます。
[プロパティ名] ボックスで、[Caption] をクリックします。
[完了] をクリックします。
[プロパティの追加] ウィザードによるストック プロパティの変更
COleControl
では、ストック プロパティがサポートされているため、[プロパティの追加] ウィザードでクラス宣言が変更されることはなく、プロパティはディスパッチ マップに追加されます。 [プロパティの追加] ウィザードでは、次の行をコントロールのディスパッチ マップ (実装ファイル (.CPP) 内にある) に追加します。
DISP_STOCKPROP_CAPTION()
コントロールのインターフェイスの説明ファイル (.IDL) に次の行が追加されます。
[id(DISPID_CAPTION), helpstring("property Caption")] BSTR Caption;
この行では、Caption プロパティに特定の ID を割り当てます。 このプロパティはバインド可能であり、値を変更する前に、このプロパティからデータベースにアクセス許可の要求が出されることに注意してください。
これにより、コントロールのユーザーが Caption プロパティを使用できるようになります。 ストック プロパティの値を使用するには、COleControl
基底クラスのメンバー変数またはメンバー関数にアクセスします。 これらのメンバー変数とメンバー関数の詳細については、次に示す「[プロパティの追加] ウィザードでサポートされるストック プロパティ」セクションを参照してください。
[プロパティの追加] ウィザードでサポートされるストック プロパティ
COleControl
クラスには、9 つのストック プロパティが用意されています。 [プロパティの追加] ウィザードを使用して、必要なプロパティを追加できます。
プロパティ | ディスパッチ マップ エントリ | 値にアクセスする方法 |
---|---|---|
Appearance |
DISP_STOCKPROP_APPEARANCE( ) | m_sAppearance としてアクセスできる値。 |
BackColor |
DISP_STOCKPROP_BACKCOLOR( ) | GetBackColor を呼び出すことによってアクセスできる値。 |
BorderStyle |
DISP_STOCKPROP_BORDERSTYLE( ) | m_sBorderStyle としてアクセスできる値。 |
Caption |
DISP_STOCKPROP_CAPTION( ) | InternalGetText を呼び出すことによってアクセスできる値。 |
Enabled |
DISP_STOCKPROP_ENABLED( ) | m_bEnabled としてアクセスできる値。 |
Font |
DISP_STOCKPROP_FONT( ) | 使用状況については、「MFC ActiveX コントロール: フォントの使用」を参照してください。 |
ForeColor |
DISP_STOCKPROP_FORECOLOR( ) | GetForeColor を呼び出すことによってアクセスできる値。 |
hWnd |
DISP_STOCKPROP_HWND( ) | m_hWnd としてアクセスできる値。 |
Text |
DISP_STOCKPROP_TEXT( ) | InternalGetText を呼び出すことによってアクセスできる値。 このプロパティは、プロパティ名を除いて Caption と同じです。 |
ReadyState |
DISP_STOCKPROP_READYSTATE() | m_lReadyState または GetReadyState としてアクセスできる値。 |
ストック プロパティと通知
ほとんどのストック プロパティには、オーバーライドできる通知関数があります。 たとえば、BackColor
プロパティが変更されるたびに、OnBackColorChanged
関数 (コントロール クラスのメンバー関数) が呼び出されます。 既定の実装 (COleControl
内の) により、InvalidateControl
が呼び出されます。 この状況に応じて追加のアクションを実行する場合は、この関数をオーバーライドします。
Color プロパティ
コントロールの描画時には、ストック プロパティ ForeColor
および BackColor
、または独自に作成した色のプロパティを使用できます。 色のプロパティを使用するには、COleControl::TranslateColor メンバー関数を呼び出します。 この関数のパラメーターは、色のプロパティの値と、オプションのパレット ハンドルとなります。 戻り値は COLORREF 値であり、SetTextColor
や CreateSolidBrush
などの GDI 関数に渡すことができます。
ストック プロパティ ForeColor
および BackColor
の色の値には、それぞれ、GetForeColor
または GetBackColor
関数を呼び出すことによってアクセスできます。
次の例では、コントロールを描画する際に、この 2 つの色のプロパティを使用する方法を示します。 一時的な COLORREF 変数と CBrush
オブジェクトを TranslateColor
の呼び出しで初期化します。1 つでは ForeColor
プロパティを使用し、もう 1 つでは BackColor
プロパティを使用します。 次に、一時的な CBrush
オブジェクトを使用してコントロールの四角形を描画し、ForeColor
プロパティを使用してテキストの色を設定します。
CBrush bkBrush(TranslateColor(GetBackColor()));
COLORREF clrFore = TranslateColor(GetForeColor());
pdc->FillRect(rcBounds, &bkBrush);
pdc->SetTextColor(clrFore);
pdc->DrawText(InternalGetText(), -1, rcBounds, DT_SINGLELINE | DT_CENTER | DT_VCENTER);
関連項目
MFC ActiveX コントロール
MFC ActiveX コントロール: プロパティ
MFC ActiveX コントロール: メソッド
COleControl クラス