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


Класс 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. Элементы 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

Требования

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