Класс 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
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