次の方法で共有


MFC ActiveX コントロール : ストック プロパティの追加

更新 : 2007 年 11 月

ストック プロパティは、既に COleControl クラスによって実装されているという点で、カスタム プロパティとは異なります。COleControl には、コントロールの一般的なプロパティをサポートする定義済みのメンバ関数があります。一般的なプロパティには、たとえば、コントロールのキャプション、前景色、背景色などがあります。その他のストック プロパティについては、後述の「プロパティ追加 ウィザードがサポートするストック プロパティ」を参照してくださいストック プロパティのディスパッチ マップ エントリには、必ず DISP_STOCKPROP というプリフィックスが付きます。

ここでは、プロパティ追加 ウィザードを使って ActiveX コントロールにストック プロパティ (この場合は Caption) を追加する方法と、それに伴うコードの変更について説明します。ここでは、次の内容について説明します。

  • プロパティ追加 ウィザードによるストック プロパティの追加

  • ストック プロパティの追加に伴うプロパティ追加 ウィザードによる変更

  • プロパティ追加 ウィザードがサポートするストック プロパティ

  • ストック プロパティと通知

  • カラー プロパティ

    6hx27e5c.alert_note(ja-jp,VS.90).gifメモ :

    Visual Basic のカスタム コントロールには、通常、Top、Left、Width、Height、Align、Tag、Name、TabIndex、TabStop、Parent などのプロパティがあります。これらのコントロール プロパティは、ActiveX コントロール コンテナによって実装されるため、ActiveX コントロールではサポートしません。

プロパティ追加 ウィザードによるストック プロパティの追加

ストック プロパティを追加する場合は、COleControl によってプロパティが自動的にサポートされるため、カスタム プロパティを追加する場合に比べて記述するコードが少なくなります。以下の手順では、ActiveX コントロール フレームワークにストック キャプション プロパティを追加します。この手順は、ほかのストック プロパティを追加するときにも使用できます。その場合は、Caption を選択したストック プロパティの名前に置き換えます。

プロパティ追加 ウィザードを使ってストック キャプション プロパティを追加するには

  1. コントロールのプロジェクトを読み込みます。

  2. [クラス ビュー] ウィンドウで、コントロールのライブラリ ノードを展開します。

  3. コントロールのインターフェイス ノード (ライブラリ ノードの 2 番目のノード) を右クリックし、ショートカット メニューを開きます。

  4. ショートカット メニューの [追加] をクリックし、[プロパティの追加] をクリックします。

    これにより、プロパティ追加 ウィザードが開きます。

  5. [プロパティ名] ボックスの [Caption] をクリックします。

  6. [完了] をクリックします。

ストック プロパティの追加に伴うプロパティ追加 ウィザードによる変更

ストック プロパティは COleControl によってサポートされるため、プロパティ追加 ウィザードがクラス宣言を変更することはありません。プロパティ追加 ウィザードは、ディスパッチ マップにプロパティを追加します。実装 (.CPP) ファイル内にあるコントロールのディスパッチ マップには、次の行が追加されます。

DISP_STOCKPROP_CAPTION()

コントロールのインターフェイス定義言語 (.IDL) ファイルには、次の行が追加されます。

[id(DISPID_CAPTION), helpstring("property Caption")] BSTR Caption;

この行は、キャプション プロパティに固有の ID を割り当てます。このプロパティは連結可能であり、値を変更する前にデータベースにアクセス許可を要求します。

これにより、コントロールのユーザーがキャプション プロパティを使用できるようになります。ストック プロパティの値を使用するには、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 が呼び出されます。この状況に応じて実行される動作を追加する場合は、この関数をオーバーライドします。

カラー プロパティ

コントロールを描画するときには、ストック プロパティの ForeColorBackColor を使用するか、独自のカラー プロパティを使用できます。カラー プロパティを使用するには、COleControl::TranslateColor メンバ関数を呼び出します。この関数のパラメータは、カラー プロパティの値とオプションのパレット ハンドルです。戻り値は COLORREF 値で、この値は SetTextColorCreateSolidBrush などの GDI 関数に渡すことができます。

ストック プロパティの ForeColorBackColor のカラー値にアクセスするには、GetForeColor 関数または GetBackColor 関数をそれぞれ呼び出します。

次の例では、これらの 2 つのカラー プロパティを使ってコントロールを描画しています。まず、TranslateColor を呼び出して、一時的な COLORREF 変数と CBrush オブジェクトを初期化します。一方には 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);

参照

概念

MFC ActiveX コントロール

MFC ActiveX コントロール : プロパティ

MFC ActiveX コントロール : メソッド

参照

COleControl クラス