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。
另請參閱
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應