Класс CComControl

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

Важно!

Этот класс и его члены нельзя использовать в приложениях, выполняемых в среде выполнения Windows.

Синтаксис

template <class T, class WinBase = CWindowImpl<T>>
class ATL_NO_VTABLE CComControl : public CComControlBase,
    public WinBase;

Параметры

T
Класс, реализуя элемент управления.

WinBase
Базовый класс, реализующий функции окна. По умолчанию используется CWindowImpl.

Участники

Открытые конструкторы

Имя Описание
CComControl::CComControl Конструктор.

Открытые методы

Имя Описание
CComControl::ControlQueryInterface Извлекает указатель на запрошенный интерфейс.
CComControl::CreateControlWindow Создает окно для элемента управления.
CComControl::FireOnChanged Уведомляет приемник контейнера об изменении свойства элемента управления.
CComControl::FireOnRequestEdit Уведомляет приемник контейнера о том, что свойство элемента управления будет изменено, и что объект запрашивает приемник, как продолжить.
CComControl::MessageBox Вызовите этот метод для создания, отображения и работы окна сообщения.

Замечания

CComControl — это набор полезных вспомогательных функций управления и основных элементов данных для элементов управления ATL. При создании стандартного элемента управления или элемента управления DHTML с помощью мастера управления ATL мастер автоматически наследует класс.CComControl CComControl является производным большинством методов от CComControlBase.

Дополнительные сведения о создании элемента управления см. в руководстве по ATL. Дополнительные сведения о мастере проектов ATL см. в статье "Создание проекта ATL".

Демонстрация CComControl методов и элементов данных см. в примере CIRC .

Иерархия наследования

WinBase

CComControlBase

CComControl

Требования

Header: atlctl.h

CComControl::CComControl

Конструктор.

CComControl();

Замечания

Вызывает конструктор CComControlBase, передав элемент m_hWnd данных, унаследованный через CWindowImpl.

CComControl::ControlQueryInterface

Извлекает указатель на запрошенный интерфейс.

virtual HRESULT ControlQueryInterface(const IID& iid, void** ppv);

Параметры

Iid
[in] Идентификатор GUID запрашиваемого интерфейса.

Ppv
[out] Указатель на указатель интерфейса, определяемый iid или NULL, если интерфейс не найден.

Замечания

Обрабатывает только интерфейсы в таблице карты COM.

Пример

// Retrieve the control's IOleObject interface. Note interface 
// is automatically released when pOleObject goes out of scope

CComPtr<IOleObject> pOleObject;
ControlQueryInterface(IID_IOleObject, (void**)&pOleObject);

CComControl::CreateControlWindow

По умолчанию создается окно для элемента управления путем вызова CWindowImpl::Create.

virtual HWND CreateControlWindow(HWND hWndParent, RECT& rcPos);

Параметры

hWndParent
[in] Обрабатывается в окне родительского или владельца. Необходимо указать допустимый дескриптор окна. Окно управления ограничивается областью родительского окна.

rcPos
[in] Начальный размер и положение создаваемого окна.

Замечания

Переопределите этот метод, если вы хотите сделать что-то другое, кроме создания одного окна, например для создания двух окон, один из которых становится панелью инструментов для элемента управления.

Пример

RECT rc = {10,10,210,110};
HWND hwndParent, hwndControl;

// get HWND of control's parent window from IOleInPlaceSite interface
m_spInPlaceSite->GetWindow(&hwndParent);
hwndControl = CreateControlWindow(hwndParent, rc);

CComControl::FireOnChanged

Уведомляет приемник контейнера об изменении свойства элемента управления.

HRESULT FireOnChanged(DISPID dispID);

Параметры

dispID
[in] Идентификатор измененного свойства.

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

Одно из стандартных значений HRESULT.

Замечания

Если класс управления является производным от IPropertyNotifySink, этот метод вызывает CFirePropNotifyEvent::FireOnChanged , чтобы уведомить все подключенные IPropertyNotifySink интерфейсы о том, что указанное свойство элемента управления изменилось. Если класс элемента управления не является производным, IPropertyNotifySinkэтот метод возвращает S_OK.

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

Пример

STDMETHODIMP CMyControl::put_MyText(BSTR newVal)
{
   // store newVal in CComBstr member
   m_bstrMyText = newVal;

   // note the DISPID for the MyText property is 3 in this example
   FireOnChanged(3);

   return S_OK;
}

CComControl::FireOnRequestEdit

Уведомляет приемник контейнера о том, что свойство элемента управления будет изменено, и что объект запрашивает приемник, как продолжить.

HRESULT FireOnRequestEdit(DISPID dispID);

Параметры

dispID
[in] Идентификатор свойства, которое необходимо изменить.

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

Одно из стандартных значений HRESULT.

Замечания

Если класс управления является производным от IPropertyNotifySink, этот метод вызывает CFirePropNotifyEvent::FireOnRequestEdit , чтобы уведомить все подключенные IPropertyNotifySink интерфейсы, которые указанный элемент управления будет изменен. Если класс элемента управления не является производным, IPropertyNotifySinkэтот метод возвращает S_OK.

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

Пример

STDMETHODIMP CMyControl::put_MyTitle(BSTR newVal)
{
   // the DISPID for MyTitle in this example is 4
   DISPID dispID = 4;

   // make sure we can change the property
   if (FireOnRequestEdit(dispID) == S_FALSE)
      return S_FALSE;

   // store newVal in CComBstr member
   m_bstrMyTitle = newVal;

   // signal that the property has been changed
   FireOnChanged(dispID);

   return S_OK;
}

CComControl::MessageBox

Вызовите этот метод для создания, отображения и работы окна сообщения.

int MessageBox(
    LPCTSTR lpszText,
    LPCTSTR lpszCaption = _T(""),
    UINT nType = MB_OK);

Параметры

lpszText
Текст, отображаемый в поле сообщения.

lpszCaption
Заголовок диалогового окна. Если значение NULL (по умолчанию), используется заголовок "Ошибка".

nType
Указывает содержимое и поведение диалогового окна. См. запись MessageBox в документации по пакету SDK для Windows для списка доступных полей сообщений. По умолчанию предоставляется простая кнопка "ОК ".

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

Возвращает целочисленное значение, указывающее одно из значений элементов меню, перечисленных в разделе MessageBox в документации по пакету SDK для Windows.

Замечания

MessageBox полезно как во время разработки, так и в качестве простого способа отображения сообщения об ошибке или предупреждении пользователю.

См. также

Класс CWindowImpl
Общие сведения о классе
Класс CComControlBase
Класс CComCompositeControl