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 设置为将用作控件窗口的对话框资源的资源 ID。 下面是数据成员的示例,派生自 CComCompositeControl 的类应包含该成员,用于标识将用于控件窗口的对话框资源:

enum { IDD = IDD_MYCOMPOSITE };

注意

复合控件始终是窗口化控件,尽管它们可以包含无窗口控件。

CComCompositeControl 派生类实现的控件内置了默认制表符行为。 当控件通过由用户在包含应用程序中按 Tab 键来接收焦点时,连续按 Tab 键会导致焦点在复合控件的所有包含的控件中循环,然后从复合控件中退出,再按容器的 Tab 键顺序循环到下一项。 托管控件的 Tab 键顺序取决于对话框资源,该顺序决定按 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。

返回值

说明
S_OK 事件接收器映射中的所有控件都已成功连接到事件源或断开与事件源的连接。
E_FAIL 并非事件接收器映射中的所有控件都可以成功连接到事件源或断开与事件源的连接。
E_POINTER 此错误通常表示控件的事件接收器映射中的条目出现问题,或在 IDispEventImplIDispEventSimpleImpl 基类中使用的模板参数出现问题。
CONNECT_E_ADVISELIMIT 连接点已达到其连接限制,无法再接收任何连接。
CONNECT_E_CANNOTCONNECT 接收器不支持此连接点所需的接口。
CONNECT_E_NOCONNECTION Cookie 值不表示有效的连接。 此错误通常表示控件的事件接收器映射中的条目出现问题,或在 IDispEventImplIDispEventSimpleImpl 基类中使用的模板参数出现问题。

备注

此方法的基础实现会在事件接收器映射的所有条目中进行搜索。 然后,它会对事件接收器映射的接收器条目所描述的 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 类
复合控件基础知识
类概述