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
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 を返します。