ストック プロパティは、既に COleControl クラスによって実装されているという点で、カスタム プロパティとは異なります。 COleControl には、コントロールの一般的なプロパティをサポートする定義済みのメンバー関数があります。 一般的なプロパティには、たとえば、コントロールのキャプション、前景色、背景色などがあります。 その他のストック プロパティについては、後述の「プロパティ追加 ウィザードがサポートするストック プロパティ」を参照してください ストック プロパティのディスパッチ マップ エントリには、必ず DISP_STOCKPROP というプリフィックスが付きます。
ここでは、プロパティ追加 ウィザードを使って ActiveX コントロールにストック プロパティ (この場合は Caption) を追加する方法と、それに伴うコードの変更について説明します。 ここでは、次の内容について説明します。
プロパティ追加 ウィザードによるストック プロパティの追加
ストック プロパティの追加に伴うプロパティ追加 ウィザードによる変更
プロパティ追加 ウィザードがサポートするストック プロパティ
ストック プロパティと通知
カラー プロパティ
注意
Visual Basic のカスタム コントロールには、通常、Top、Left、Width、Height、Align、Tag、Name、TabIndex、TabStop、Parent などのプロパティがあります。 これらのコントロール プロパティは、ActiveX コントロール コンテナーによって実装されるため、ActiveX コントロールではサポートしません。
プロパティ追加 ウィザードによるストック プロパティの追加
ストック プロパティを追加する場合は、COleControl によってプロパティが自動的にサポートされるため、カスタム プロパティを追加する場合に比べて記述するコードが少なくなります。 以下の手順では、ActiveX コントロール フレームワークにストック キャプション プロパティを追加します。この手順は、ほかのストック プロパティを追加するときにも使用できます。 その場合は、Caption を選択したストック プロパティの名前に置き換えます。
プロパティ追加 ウィザードを使ってストック キャプション プロパティを追加するには
コントロールのプロジェクトを読み込みます。
[クラス ビュー] ウィンドウで、コントロールのライブラリ ノードを展開します。
コントロールのインターフェイス ノード (ライブラリ ノードの 2 番目のノード) を右クリックし、ショートカット メニューを開きます。
ショートカット メニューの [追加] をクリックし、[プロパティの追加] をクリックします。
これにより、プロパティ追加ウィザードが開きます。
[プロパティ名] ボックスの [Caption] をクリックします。
[完了] をクリックします。
ストック プロパティの追加に伴うプロパティ追加 ウィザードによる変更
ストック プロパティは COleControl によってサポートされるため、プロパティ追加 ウィザードがクラス宣言を変更することはありません。プロパティ追加 ウィザードは、ディスパッチ マップにプロパティを追加します。 実装 (.CPP) ファイル内にあるコントロールのディスパッチ マップには、次の行が追加されます。
DISP_STOCKPROP_CAPTION()
コントロールのインターフェイス定義言語 (.IDL) ファイルには、次の行が追加されます。
[id(DISPID_CAPTION), helpstring("property Caption")] BSTR Caption;
この行は、キャプション プロパティに固有の ID を割り当てます。 このプロパティは連結可能であり、値を変更する前にデータベースにアクセス許可を要求します。
これにより、コントロールのユーザーがキャプション プロパティを使用できるようになります。 ストック プロパティの値を使用するには、COleControl 基本クラスのメンバー変数またはメンバー関数にアクセスします。 これらのメンバー変数とメンバー関数の詳細については、次の「プロパティ追加 ウィザードがサポートするストック プロパティ」を参照してください。
プロパティ追加 ウィザードがサポートするストック プロパティ
COleControl クラスには、9 つのストック プロパティが用意されています。 必要なプロパティを追加するには、プロパティ追加 ウィザードを使用します。
プロパティ |
ディスパッチ マップ エントリ |
値にアクセスする方法 |
---|---|---|
表示形式 |
DISP_STOCKPROP_APPEARANCE( ) |
m_sAppearance としてアクセスします。 |
BackColor |
DISP_STOCKPROP_BACKCOLOR( ) |
GetBackColor を呼び出してアクセスします。 |
BorderStyle |
DISP_STOCKPROP_BORDERSTYLE( ) |
m_sBorderStyle としてアクセスします。 |
[キャプション] |
DISP_STOCKPROP_CAPTION( ) |
InternalGetText を呼び出してアクセスします。 |
Enabled |
DISP_STOCKPROP_ENABLED( ) |
m_bEnabled としてアクセスします。 |
[フォント] |
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 が呼び出されます。 この状況に応じて実行される動作を追加する場合は、この関数をオーバーライドします。
カラー プロパティ
コントロールを描画するときには、ストック プロパティの ForeColor と BackColor を使用するか、独自のカラー プロパティを使用できます。 カラー プロパティを使用するには、COleControl::TranslateColor メンバー関数を呼び出します。 この関数のパラメーターは、カラー プロパティの値とオプションのパレット ハンドルです。 戻り値は COLORREF 値で、この値は SetTextColor や CreateSolidBrush などの GDI 関数に渡すことができます。
ストック プロパティの ForeColor と BackColor のカラー値にアクセスするには、GetForeColor 関数または GetBackColor 関数をそれぞれ呼び出します。
次の例では、これらの 2 つのカラー プロパティを使ってコントロールを描画しています。 一時的な初期化COLORREF変数とCBrushオブジェクトへの呼び出しをTranslateColor:1 つを使用して、ForeColorプロパティおよびその他の使用、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);