共用方式為


CComCompositeControl 類別

這個類別提供實作複合控件所需的方法。

重要

這個類別及其成員不能用於在 Windows 執行階段 中執行的應用程式。

語法

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

參數

T
您的類別衍生自 CComObjectRootCComObjectRootEx,以及您想要支援複合控件的任何其他介面。

成員

公用建構函式

名稱 描述
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會設定為將做為控件視窗之對話框資源的資源識別碼。 以下是衍生自 CComCompositeControl 的類別應該包含的數據成員範例,以識別要用於控件視窗的對話資源:

enum { IDD = IDD_MYCOMPOSITE };

注意

複合控件一律是視窗控件,雖然可以包含無視窗控件。

衍生類別所實作的 CComCompositeControl控件內建預設索引標籤行為。 當控件藉由在包含應用程式中定位到 來接收焦點時,連續按下 TAB 鍵會導致焦點迴圈處理所有複合控件的自主控件,然後離開複合控件,然後在容器的定位順序中開啟下一個專案。 主控控件的定位順序是由對話框資源決定,並決定索引卷標順序的發生順序。

注意

若要讓快捷鍵與 正常運作 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。

傳回值

Description
S_OK 事件接收對應中的所有控制件都已成功與其事件來源連線或中斷連線。
E_FAIL 事件接收對應中的所有控制件都無法成功連線或中斷連線到其事件來源。
E_POINTER 此錯誤通常表示控件事件接收對應中的項目有問題,或是 或 IDispEventSimpleImpl 基類中使用的IDispEventImpl樣板自變數發生問題。
CONNECT_E_ADVISELIMIT 連接點已經達到其連線限制,無法再接受。
CONNECT_E_CANNOTCONNECT 接收不支援這個連接點所需的介面。
CONNECT_E_NOCONNECTION Cookie 值不代表有效的連線。 此錯誤通常表示控件事件接收對應中的項目有問題,或是 或 IDispEventSimpleImpl 基類中使用的IDispEventImpl樣板自變數發生問題。

備註

此方法的基底實作會搜尋事件接收對應中的專案。 然後,它會建議或取消參考事件接收對應之接收專案所描述之 COM 對象的連接點。 這個成員方法也依賴衍生類別繼承自接收對應中每個控件的一個 實例 IDispEventImpl ,這是建議或取消加入。

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_hbrBackgroundCComCompositeControl::m_hWndFocus 數據成員初始化為 NULL。

CComCompositeControl::~CComCompositeControl

解構函式。

~CComCompositeControl();

備註

如果背景物件存在,則刪除它。

CComCompositeControl::CreateControlWindow

呼叫此方法以建立控件視窗,並建議任何裝載的控件。

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

參數

hWndParent
控件父視窗的句柄。

rcPos
相對於 hWndParent,複合控件在用戶端座標中的位置矩形。

傳回值

傳回新建立之複合控件對話框的句柄。

備註

此方法會呼叫 CComCompositeControl::CreateCComCompositeControl::AdviseSinkMap

CComCompositeControl::m_hbrBackground

背景筆刷。

HBRUSH m_hbrBackground;

CComCompositeControl::m_hWndFocus

目前具有焦點之視窗的句柄。

HWND m_hWndFocus;

CComCompositeControl::SetBackgroundColorFromAmbient

呼叫這個方法,以使用容器的背景色彩來設定複合控件的背景色彩。

HRESULT SetBackgroundColorFromAmbient();

傳回值

傳回成功時S_OK,或在失敗時傳回錯誤 HRESULT。

另請參閱

CComControl 類別
複合控制項基本概念
類別概觀