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
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。