共用方式為


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 會設定為將做為控制項視窗之對話方塊資源的資源識別碼。 以下是衍生自 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_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 類別
複合控制項基本概念
類別概觀