Поделиться через


Класс CComCompositeControl

Примечание.

Библиотека активных шаблонов (ATL) продолжает поддерживаться. Однако мы больше не добавляем функции или обновляем документацию.

Этот класс предоставляет методы, необходимые для реализации составного элемента управления.

Внимание

Этот класс и его члены нельзя использовать в приложениях, выполняемых в среде выполнения 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. Элементы ActiveX, производные от CComCompositeControl них, размещаются в стандартном диалоговом окне. Эти типы элементов управления называются составными элементами управления, так как они могут размещать другие элементы управления (собственные элементы управления Windows и элементы ActiveX).

CComCompositeControl определяет ресурс диалогового окна для создания составного элемента управления путем поиска перечисленного элемента данных в дочернем классе. Идентификатор участника этого дочернего класса имеет идентификатор ресурса ресурса ресурса диалогового окна, который будет использоваться в качестве окна элемента управления. Ниже приведен пример элемента данных, производный от 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.

Возвращаемое значение

значение Описание
S_OK Все элементы управления в карте приемника событий были подключены или отключены от источника событий успешно.
E_FAIL Не все элементы управления в карте приемника событий могут быть подключены или отключены от источника событий успешно.
E_POINTER Эта ошибка обычно указывает на проблему с записью в карте приемника событий элемента управления или проблемой с аргументом шаблона, используемым в базовом IDispEventImpl классе.IDispEventSimpleImpl
CONNECT_E_ADVISELIMIT Точка подключения уже достигла предела подключений и больше не может принимать.
CONNECT_E_CANNOTCONNECT Приемник не поддерживает интерфейс, необходимый для этой точки подключения.
CONNECT_E_NOCONNECTION Значение файла cookie не представляет допустимое соединение. Эта ошибка обычно указывает на проблему с записью в карте приемника событий элемента управления или проблемой с аргументом шаблона, используемым в базовом IDispEventImpl классе.IDispEventSimpleImpl

Замечания

Базовая реализация этого метода выполняет поиск по записям в карте приемника событий. Затем он советует или отменяет точки подключения к COM-объектам, описанным в записях приемника событий карты событий. Этот метод-член также зависит от того, что производный класс наследует от одного экземпляра каждого элемента управления на карте приемника IDispEventImpl , который должен быть рекомендуем или неуправляем.

CComCompositeControl::CalcExtent

Вызовите этот метод, чтобы вычислить размер в единицах HIMETRIC ресурса диалогового окна, используемого для размещения составного элемента управления.

BOOL CalcExtent(SIZE& size);

Параметры

size
Ссылка на структуру SIZE для заполнения этим методом.

Возвращаемое значение

ЗНАЧЕНИЕ TRUE, если элемент управления размещается в диалоговом окне; в противном случае ЗНАЧЕНИЕ FALSE.

Замечания

Размер возвращается в параметре размера .

CComCompositeControl::Create

Этот метод вызывается для создания окна управления для составного элемента управления.

HWND Create(
    HWND hWndParent,
    RECT& /* rcPos */,
    LPARAM dwInitParam = NULL);

Параметры

hWndParent
Дескриптор родительского окна элемента управления.

rcPos
Зарезервировано.

dwInitParam
Данные, передаваемые элементу управления во время создания элемента управления. Данные, передаваемые как dwInitParam, будут отображаться в качестве параметра LPARAM сообщения WM_INITDIALOG, который будет отправлен в составной элемент управления при его создании.

Возвращаемое значение

Дескриптор только что созданного составного элемента управления.

Замечания

Этот метод обычно вызывается во время активации элемента управления на месте.

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
Основные сведения о составном элементе управления
Общие сведения о классе