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
自动派生类。 CComControl
从 CComControlBase 派生大部分方法。
若要详细了解如何创建控件,请参阅 ATL 教程。 有关 ATL 项目向导的详细信息,请参阅创建 ATL 项目一文。
有关 CComControl
方法和数据成员的演示,请参阅 CIRC 示例。
继承层次结构
WinBase
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
对开发很有用,同时也是向用户显示错误或警告消息的简单方法。