次の方法で共有


CComCompositeControl クラス

更新 : 2007 年 11 月

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

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

パラメータ

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

解説

CComCompositeControl クラスの派生クラスは ActiveX 複合コントロールの機能を継承します。CComCompositeControl から派生した ActiveX コントロールは、標準ダイアログ ボックスがホストします。これらのタイプのコントロールは、ほかのコントロール (ネイティブな Windows コントロールと ActiveX コントロール) をホストできるので複合コントロールと呼ばれます。

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

enum { IDD = IDD_MYCOMPOSITE };
z3e7bbb1.alert_note(ja-jp,VS.90).gifメモ :

複合コントロールは、ウィンドウなしのコントロールを含むこともできますが、常にウィンドウを持つコントロールになります。

CComCompositeControl の派生クラスによって実装されたコントロールには、既定のタブ動作が組み込まれています。コンテナ アプリケーション内でのタブ操作によってコントロールがフォーカスを受け取ると、Tab キーが押されるたびにフォーカスは、複合コントロール内のすべてのコントロールを巡回します。その後、フォーカスは複合コントロールの外側に出て、コンテナのタブ オーダーの次のアイテムに移ります。複合コントロール内のコントロールのタブ オーダーは、ダイアログ リソースによって決定され、タブ オーダーに従ってタブの移動が行われます。

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

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;
}

必要条件

ヘッダー : atlctl.h

参照

概念

複合コントロールの基本

参照

CComControl クラス

その他の技術情報

CComCompositeControl のメンバ

ATL クラスの概要