次の方法で共有


CComCompositeControl クラス

このクラスには、複合コントロールを実装するために必要なメソッドが用意されています。

重要

このクラスとそのメンバーは、Windows ランタイムで実行するアプリケーションで使用することはできません。

構文

template <class T>
class CComCompositeControl : public CComControl<T,CAxDialogImpl<T>>

パラメーター

T
CComObjectRoot または CComObjectRootEx から、および複合コントロールでサポートするインターフェイスから派生するクラス。

メンバー

パブリック コンストラクター

名前 説明
CComCompositeControl::CComCompositeControl コンストラクター。
CComCompositeControl::~CComCompositeControl デストラクター。

パブリック メソッド

名前 説明
CComCompositeControl::AdviseSinkMap 複合コントロールによってホストされているすべてのコントロールをアドバイスするかアドバイスを中止するには、このメソッドを呼び出します。
CComCompositeControl::CalcExtent 複合コントロールをホストするために使用されるダイアログ リソースのサイズを HIMETRIC 単位で計算するには、このメソッドを呼び出します。
CComCompositeControl::Create このメソッドは、複合コントロールのコントロール ウィンドウを作成するために呼び出されます。
CComCompositeControl::CreateControlWindow コントロール ウィンドウを作成し、ホストされているコントロールをアドバイスするには、このメソッドを呼び出します。
CComCompositeControl::SetBackgroundColorFromAmbient コンテナーの背景色を使用して複合コントロールの背景色を設定するには、このメソッドを呼び出します。

パブリック データ メンバー

名前 説明
CComCompositeControl::m_hbrBackground 背景ブラシ。
CComCompositeControl::m_hWndFocus 現在フォーカスがあるウィンドウのハンドル。

解説

クラス CComCompositeControl から派生したクラスは、ActiveX 複合コントロールの機能を継承します。 CComCompositeControl から派生する ActiveX コントロールは、標準ダイアログ ボックスによってホストされます。 これらの種類のコントロールは、他のコントロール (ネイティブ Windows コントロールや ActiveX コントロール) をホストすることができるため、複合コントロールと呼ばれます。

CComCompositeControl は、子クラスで列挙されたデータ メンバーを探して、複合コントロールの作成に使用するダイアログ リソースを識別します。 この子クラスのメンバー IDD は、コントロールのウィンドウとして使用されるダイアログ リソースのリソース ID に設定されます。 コントロールのウィンドウに使用されるダイアログ リソースを識別するために、CComCompositeControl から派生したクラスに含まれる必要のあるデータ メンバーの例を次に示します。

enum { IDD = IDD_MYCOMPOSITE };

Note

複合コントロールは常にウィンドウ コントロールですが、ウィンドウレス コントロールを含むことができます。

CComCompositeControl の派生クラスによって実装されるコントロールには、既定のタブ動作が組み込まれています。 そのコントロールが、それを含むアプリケーション内でタブ移動によってフォーカスを受け取った場合、Tab キーを連続して押すと、フォーカスは複合コントロールに含まれているすべてのコントロールを循環し、次に複合コントロールの外へ、さらにコンテナーのタブ オーダーの次の項目へと移動します。 ホストされているコントロールのタブ オーダーは、ダイアログ リソースによって決まり、タブ移動が発生する順序を決定します。

Note

アクセラレータが CComCompositeControl で適切に動作するには、コントロールの作成時にアクセラレータ テーブルを読み込み、ハンドルとアクセラレータの数を IOleControlImpl::GetControlInfo に渡して返し、最後にコントロールが解放されたらテーブルを破棄することが必要です。

// Example for overriding IOleControlImpl::GetControlInfo()
// This example uses the accelerator table from the project resources
// with the identifier IDR_ACCELTABLE
// Define GetControlInfo() in the header of your composite 
// control class as follows:

STDMETHOD(GetControlInfo)(CONTROLINFO* pCI)
{
    // Load the accelerator table from the resource
    pCI->hAccel = LoadAccelerators(_AtlBaseModule.GetResourceInstance(), 
       MAKEINTRESOURCE(IDR_ACCELTABLE));

    if (pCI->hAccel == NULL)
        return E_FAIL;

    // Get the number of accelerators in the table
    pCI->cAccel = (USHORT)CopyAcceleratorTable(pCI->hAccel, NULL, 0);
    // The following is optional if you want your control
    // to process the return and/or escape keys
    // pCI.dwFlags = CTRLINFO_EATS_RETURN | CTRLINFO_EATS_ESCAPE;
    pCI->dwFlags = 0;

    return S_OK;
}

継承階層

WinBase

CComControlBase

CComControl

CComCompositeControl

要件

ヘッダー: atlctl.h

CComCompositeControl::AdviseSinkMap

複合コントロールによってホストされているすべてのコントロールをアドバイスするかアドバイスを中止するには、このメソッドを呼び出します。

HRESULT AdviseSinkMap(bool bAdvise);

パラメーター

bAdvise
すべてのコントロールがアドバイスされる場合は true。それ以外の場合は false。

戻り値

説明
S_OK イベント シンク マップ内のすべてのコントロールが、イベント ソースに正常に接続または切断されました。
E_FAIL イベント シンク マップ内のすべてのコントロールが、イベント ソースに正常に接続または切断されたとは限りません。
E_POINTER 通常、このエラーは、コントロールのイベント シンク マップ内のエントリに問題があるか、IDispEventImpl または IDispEventSimpleImpl 基本クラスで使用されているテンプレート引数に問題があることを示します。
CONNECT_E_ADVISELIMIT 接続ポイントは既に接続の制限に達しており、それ以上受け入れることはできません。
CONNECT_E_CANNOTCONNECT この接続ポイントに必要なインターフェイスがシンクでサポートされていません。
CONNECT_E_NOCONNECTION Cookie 値が有効な接続を表していません。 通常、このエラーは、コントロールのイベント シンク マップ内のエントリに問題があるか、IDispEventImpl または IDispEventSimpleImpl 基本クラスで使用されているテンプレート引数に問題があることを示します。

解説

このメソッドの基本実装は、イベント シンク マップ内のエントリを検索します。 次に、イベント シンク マップのシンク エントリによって記述された COM オブジェクトへの接続ポイントをアドバイスまたはアドバイス中止します。 このメンバー メソッドは、派生クラスが、アドバイスまたはアドバイス中止されるシンク マップ内のすべてのコントロールについて、IDispEventImpl の 1 つのインスタンスを継承することを前提としています。

CComCompositeControl::CalcExtent

複合コントロールをホストするために使用されるダイアログ リソースのサイズを HIMETRIC 単位で計算するには、このメソッドを呼び出します。

BOOL CalcExtent(SIZE& size);

パラメーター

size
このメソッドによって塗りつぶされる SIZE 構造体への参照。

戻り値

コントロールがダイアログ ボックスでホストされている場合は TRUE。それ以外の場合は FALSE。

解説

サイズは size パラメーターで返されます。

CComCompositeControl::Create

このメソッドは、複合コントロールのコントロール ウィンドウを作成するために呼び出されます。

HWND Create(
    HWND hWndParent,
    RECT& /* rcPos */,
    LPARAM dwInitParam = NULL);

パラメーター

hWndParent
コントロールの親ウィンドウへのハンドル。

rcPos
予約済み。

dwInitParam
コントロールの作成時にコントロールに渡されるデータ。 dwInitParam として渡されたデータは、WM_INITDIALOG メッセージの LPARAM パラメーターとして表示され、作成時に複合コントロールに送信されます。

戻り値

新しく作成された複合コントロール ダイアログ ボックスへのハンドル。

解説

通常、このメソッドはコントロールのインプレースでのアクティブ化の際に呼び出されます。

CComCompositeControl::CComCompositeControl

コンストラクター。

CComCompositeControl();

解説

CComCompositeControl::m_hbrBackground および CComCompositeControl::m_hWndFocus データ メンバーを NULL に初期化します。

CComCompositeControl::~CComCompositeControl

デストラクター。

~CComCompositeControl();

解説

バックグラウンド オブジェクトが存在する場合は削除します。

CComCompositeControl::CreateControlWindow

コントロール ウィンドウを作成し、ホストされているコントロールをアドバイスするには、このメソッドを呼び出します。

virtual HWND CreateControlWindow(
    HWND hWndParent,
    RECT& rcPos);

パラメーター

hWndParent
コントロールの親ウィンドウへのハンドル。

rcPos
hWndParent に対して総体的なクライアント座標で表された複合コントロールの位置四角形。

戻り値

新しく作成された複合コントロール ダイアログ ボックスへのハンドルを返します。

解説

このメソッドは、CComCompositeControl::Create および CComCompositeControl::AdviseSinkMap を呼び出します。

CComCompositeControl::m_hbrBackground

背景ブラシ。

HBRUSH m_hbrBackground;

CComCompositeControl::m_hWndFocus

現在フォーカスがあるウィンドウのハンドル。

HWND m_hWndFocus;

CComCompositeControl::SetBackgroundColorFromAmbient

コンテナーの背景色を使用して複合コントロールの背景色を設定するには、このメソッドを呼び出します。

HRESULT SetBackgroundColorFromAmbient();

戻り値

成功した場合は S_OK、失敗した場合はエラー HRESULT を返します。

関連項目

CComControl クラス
複合コントロールの基本
クラスの概要