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 控件的一组有用的控件帮助程序函数和基本数据成员。 使用 ATL 控件向导创建标准控件或 DHTML 控件时,向导将从 CComControl 自动派生类。 CComControlCComControlBase 派生大部分方法。

若要详细了解如何创建控件,请参阅 ATL 教程。 有关 ATL 项目向导的详细信息,请参阅创建 ATL 项目一文。

有关 CComControl 方法和数据成员的演示,请参阅 CIRC 示例。

继承层次结构

WinBase

CComControlBase

CComControl

要求

标头:atlctl.h

CComControl::CComControl

构造函数。

CComControl();

注解

调用 CComControlBase 构造函数,传递通过 CWindowImpl 继承的 m_hWnd 数据成员。

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
指定对话框的内容和行为。 有关可用的不同消息框的列表,请参阅 Windows SDK 文档中的 MessageBox 条目。 默认值提供一个简单的“确定”按钮。

返回值

返回一个整数值,该值指定 Windows SDK 文档中 MessageBox 下列出的菜单项值之一。

注解

MessageBox 对开发很有用,同时也是向用户显示错误或警告消息的简单方法。

另请参阅

CWindowImpl 类
类概述
CComControlBase 类
CComCompositeControl 类