次の方法で共有


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

ストック プロパティは、クラス COleControlによって既に実装されているという点で、カスタム プロパティとは異なります。 COleControl には、コントロールの共通プロパティをサポートする定義済みのメンバー関数が含まれています。 一部の一般的なプロパティには、コントロールのキャプションと前景色と背景色が含まれます。 その他のストック プロパティの詳細については、この記事の後半の 「プロパティの追加ウィザードでサポートされるストック プロパティ 」を参照してください。 ストック プロパティのディスパッチ マップ エントリには、常にDISP_STOCKPROPプレフィックスが付けられます。

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

プロパティの追加ウィザードを使用してストック プロパティを追加する

ストック プロパティを追加すると、プロパティのサポートは COleControlによって自動的に処理されるため、カスタム プロパティを追加するよりもコードが少なくて済みます。 次の手順では、ActiveX コントロール フレームワークに stock Caption プロパティを追加する方法を示します。また、他のストック プロパティの追加にも使用できます。 選択したストック プロパティ名を Caption に置き換える。

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

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

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

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

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

    プロパティの追加ウィザードが開きます。

  5. [ プロパティ名] ボックスで、[ キャプション] をクリックします。

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

ストック プロパティのプロパティの追加ウィザードの変更

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を呼び出します。 この状況に対応して追加のアクションを実行する場合は、この関数をオーバーライドします。

カラー プロパティ

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

ストック 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 クラス