次の方法で共有


MFC ActiveX コントロール : ActiveX コントロールにおけるピクチャの使用

この技術情報では、一般的なピクチャの型を ActiveX コントロールで実行する方法を説明します。ここでは、次の内容について説明します。

  • カスタム ピクチャ プロパティの概要

  • ActiveX コントロールのカスタム ピクチャ プロパティの実装

  • コントロール プロジェクトへの加算

カスタム ピクチャ プロパティの概要

ピクチャの型はである ActiveX コントロールに共通型のグループの 1 つです。ピクチャの型は、メタファイル、ビットマップ、アイコンを処理し、ユーザーが ActiveX コントロールで表示されるピクチャを指定することができます。カスタム ピクチャ プロパティは、ピクチャ オブジェクトを使用して実装され、ピクチャ プロパティへのコントロールのユーザー アクセスを可能にする get または集計関数。コントロールのユーザーが標準的なピクチャ プロパティ ページを使用してカスタム ピクチャ プロパティにアクセスします。

標準ピクチャの種類に加え、フォントおよび色の型も使用できます。標準フォントの使用の詳細については、 ActiveX コントロール、 " " を参照 MFC ActiveX コントロール: フォントを使用します技術情報を入力します。

ActiveX コントロールのクラスは、コントロール内のピクチャ プロパティを実装するために使用できる複数のコンポーネントを提供します。これらのコンポーネントには次のものが含まれています:

  • CPictureHolder のクラス。

    このクラスは、カスタム ピクチャ プロパティによって表示される項目にピクチャ オブジェクトへの簡単なアクセスと機能を提供します。

  • プロパティの型 LPPICTUREDISPの詳細については、に実装された get または集計関数サポートします。

    クラス ビューを使用して、ピクチャの型をサポートするプロパティやカスタム プロパティを追加できます。クラス ビューの ActiveX コントロールのプロパティの追加の詳細については、技術情報 MFC ActiveX コントロール: プロパティを参照してください。

  • コントロールのピクチャ プロパティまたはプロパティを処理するプロパティ ページ。

    このプロパティ ページでは、 ActiveX コントロールに使用できるストック プロパティ ページのグループの一部です。ActiveX コントロールのプロパティ ページの詳細については、技術情報 MFC ActiveX コントロール: ストック プロパティ ページを使用するを参照してください。

ActiveX コントロールのカスタム ピクチャ プロパティの実装

このセクションに記載されている手順を完了したらコントロールは、ユーザーが選択したアイコン表示できます。ユーザーはプロパティ ページを使用して、現在のピクチャを表示するピクチャを示す変更し、 [異なるピクチャにユーザーを許可する参照ボタンがあります。

カスタム ピクチャ プロパティは、他のプロパティ、カスタム プロパティがピクチャの型をサポートする必要があることで、重要な点を実行するために使用されているようなプロセスを使用して実装されます。ピクチャ プロパティ項目が ActiveX コントロールによって描画する必要があるため、完全に実行する前にいくつかの加算および変更がプロパティに行う必要があります。

カスタム ピクチャ プロパティを実装するには、次の操作を行います。:

  • コントロール プロジェクトにコードを追加します。。

    標準ピクチャ プロパティ ページ ID、データ メンバーの型 CPictureHolder、 get 関数と set 実装を持つカスタム プロパティの型は LPPICTUREDISP 追加する必要があります。

  • コントロール クラスの複数の関数を変更します。。

    ActiveX コントロールの描画を行う複数の関数に対するこれらの変更が行われます。

コントロール プロジェクトへの加算

コントロールの実装ファイル (.cpp)の BEGIN_PROPPAGEIDS マクロと標準ピクチャ プロパティ ページのプロパティ ページ ID を追加するには、次の行を挿入します:

PROPPAGEID(CLSID_CPicturePropPage)

または 1 ずつ BEGIN_PROPPAGEIDS マクロのパラメーター数をインクリメントします。次の行は、これを示しています:

BEGIN_PROPPAGEIDS(CMyAxPicCtrl, 2)

コントロール クラスに CPictureHolder のデータ メンバーを追加するには、コントロールのヘッダー ファイルでコントロール クラス宣言の保護されたセクションに次の行を挿入します (。H):

CPictureHolder    m_pic;

データ メンバー m_picに名前を付ける必要はありません; どの名前であればどんなもの

次に、ピクチャの型をサポートするカスタム プロパティを追加します:

カスタム ピクチャ プロパティをプロパティの追加ウィザードを追加するには

  1. コントロール プロジェクトを読み込んでください。

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

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

  4. このコマンドをショートカット メニューから、 追加プロパティの追加を選択します。

  5. プロパティ名(O),プロパティ名 ボックスで、プロパティ名を入力します。例として、 ControlPicture は、この手順で使用されます。

  6. プロパティの型,プロパティの種類,プロパティの種類(Y),プロパティ型 ボックスでは、プロパティ型の選択 IPictureDisp*

  7. Implementation Typeでは、をクリック Get/Set Methods

  8. get および集計関数の一意の名前を入力するか、既定の名前を受け入れます。(この例では、既定名 GetControlPicture は、 SetControlPicture で使用されます)。

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

プロパティの追加ウィザードでは、ヘッダー コントロールのディスパッチ マップの注釈の間に次のコードを追加します。H)ファイル:

IPictureDisp* GetControlPicture(void);
void SetControlPicture(IPictureDisp* pVal);

また、次のコードは、コントロールの実装 (.cpp)ファイルのディスパッチ マップに挿入されています:

DISP_PROPERTY_EX_ID(CMyAxPicCtrl, "ControlPicture", dispidControlPicture, 
   GetControlPicture, SetControlPicture, VT_PICTURE)

プロパティの追加ウィザードは、コントロールの実装ファイルの次の 2 種類のスタブ関数を追加します:

IPictureDisp* CWizardGenCtrl::GetControlPicture(void)
{
   AFX_MANAGE_STATE(AfxGetStaticModuleState());

   // TODO: Add your dispatch handler code here

   return NULL;
}

void CWizardGenCtrl::SetControlPicture(IPictureDisp* /*pVal*/)
{
   AFX_MANAGE_STATE(AfxGetStaticModuleState());

   // TODO: Add your property handler code here

   SetModifiedFlag();
}

[!メモ]

コントロール クラスと関数名は、上記の例とは異なる場合があります。

1exs6wht.collapse_all(ja-jp,VS.110).gifコントロール プロジェクトの変更

コントロール プロジェクトに整数を加算した後、 ActiveX コントロールのレンダリングに影響するいくつかの関数を変更する必要があります。カスタム ピクチャ プロパティのこれらの関数は、 OnResetState、 OnDraw、 get または集計関数は、コントロールの実装ファイルに、あります。(この例では、コントロール クラスが CSampleCtrlというメモは、 CPictureHolder のデータ メンバー m_picと呼ばれ、カスタム ピクチャ プロパティの名前は ControlPictureです)。

コントロールの OnResetState 関数では、 COleControl::OnResetStateに呼び出しの後に次のオプションの行を追加します:

m_pic.CreateEmpty();

この値は空白にピクチャ コントロールのピクチャを設定します。

適切にピクチャを描画するには、コントロールの OnDraw の関数の CPictureHolder::Render に呼び出しを作成します。次の例に従って、関数を変更する:

void CMyAxPicCtrl::OnDraw(CDC* pdc, const CRect& rcBounds, const CRect& /*rcInvalid*/)
{
    if (!pdc)
        return;

   m_pic.Render(pdc, rcBounds, rcBounds);
}

コントロールのカスタム ピクチャ プロパティの Get 関数で、次の行を追加します:

return m_pic.GetPictureDispatch();

コントロールのカスタム ピクチャ プロパティの集計関数に次の行を追加します:

m_pic.SetPictureDispatch(pVal);
InvalidateControl();

ピクチャ プロパティは、デザイン時に追加された情報を実行時に表示されるように永続的に保存する必要があります。COleControlに次の行の派生クラスの DoPropExchange 関数を追加します:

PX_Picture(pPX, _T("ControlPicture"), m_pic);

[!メモ]

クラスと関数名は、上記の例とは異なる場合があります。

変更を完了したら、カスタム ピクチャ プロパティの新しい機能を組み込み、新しいプロパティをテストするテスト コンテナーを使用するプロジェクトをリビルドします。テスト コンテナーへのアクセス方法については、「テスト コンテナーでのプロパティとイベントのテスト」を参照してください。

参照

概念

MFC ActiveX コントロール

MFC ActiveX コントロール : フォントの使用

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