CComControlBase 类
此类提供用于创建和管理 ATL 控件的方法。
重要
无法在 Windows 运行时中执行的应用程序中使用此类及其成员。
语法
class ATL_NO_VTABLE CComControlBase
成员
公共 Typedef
名称 | 描述 |
---|---|
CComControlBase::AppearanceType | 如果 m_nAppearance 常用属性的类型不是 short ,则重写。 |
公共构造函数
名称 | 描述 |
---|---|
CComControlBase::CComControlBase | 构造函数。 |
CComControlBase::~CComControlBase | 析构函数。 |
公共方法
名称 | 描述 |
---|---|
CComControlBase::ControlQueryInterface | 检索指向所请求的接口的指针。 |
CComControlBase::DoesVerbActivate | 检查 IOleObjectImpl::DoVerb 使用的 iVerb 参数是激活控件的用户界面(iVerb 等于 OLEIVERB_UIACTIVATE)、定义用户双击控件时执行的操作(iVerb 等于 OLEIVERB_PRIMARY)、显示控件(iVerb 等于 OLEIVERB_SHOW),还是激活控件(iVerb 等于 OLEIVERB_INPLACEACTIVATE)。 |
CComControlBase::DoesVerbUIActivate | 检查 IOleObjectImpl::DoVerb 使用的 iVerb 参数是否导致控件的用户界面激活并返回 TRUE。 |
CComControlBase::DoVerbProperties | 显示控件的属性页。 |
CComControlBase::FireViewChange | 调用此方法可告知容器重绘控件,或向已注册的建议接收器通知控件视图已更改。 |
CComControlBase::GetAmbientAppearance | 检索 DISPID_AMBIENT_APPEARANCE,即控件的当前外观设置:0 表示平面,1 表示 3D。 |
CComControlBase::GetAmbientAutoClip | 检索 DISPID_AMBIENT_AUTOCLIP,这是一个标志,指示容器是否支持自动剪裁控件显示区域。 |
CComControlBase::GetAmbientBackColor | 检索 DISPID_AMBIENT_BACKCOLOR,即所有控件的环境背景色,由容器定义。 |
CComControlBase::GetAmbientCharSet | 检索 DISPID_AMBIENT_CHARSET,即所有控件的环境字符集,由容器定义。 |
CComControlBase::GetAmbientCodePage | 检索 DISPID_AMBIENT_CODEPAGE,即所有控件的环境字符集,由容器定义。 |
CComControlBase::GetAmbientDisplayAsDefault | 检索 DISPID_AMBIENT_DISPLAYASDEFAULT,如果容器已将此站点中的控件标记为默认按钮,则该标志为 TRUE,因此按钮控件应使用较粗的框架绘制自身。 |
CComControlBase::GetAmbientDisplayName | 检索 DISPID_AMBIENT_DISPLAYNAME,即容器提供给控件的名称。 |
CComControlBase::GetAmbientFont | 检索指向容器的环境 IFont 接口的指针。 |
CComControlBase::GetAmbientFontDisp | 检索指向容器的环境 IFontDisp 调度接口的指针。 |
CComControlBase::GetAmbientForeColor | 检索 DISPID_AMBIENT_FORECOLOR,即所有控件的环境前景色,由容器定义。 |
CComControlBase::GetAmbientLocaleID | 检索 DISPID_AMBIENT_LOCALEID,即容器使用的语言的标识符。 |
CComControlBase::GetAmbientMessageReflect | 检索 DISPID_AMBIENT_MESSAGEREFLECT,这是一个标志,指示容器是否希望接收窗口消息(例如 WM_DRAWITEM)作为事件。 |
CComControlBase::GetAmbientPalette | 检索用于访问容器的 HPALETTE 的 DISPID_AMBIENT_PALETTE。 |
CComControlBase::GetAmbientProperty | 检索 id 指定的容器属性。 |
CComControlBase::GetAmbientRightToLeft | 检索 DISPID_AMBIENT_RIGHTTOLEFT,即容器显示内容的方向。 |
CComControlBase::GetAmbientScaleUnits | 检索 DISPID_AMBIENT_SCALEUNITS,即容器用于显示标记的环境单位(例如英寸或厘米)。 |
CComControlBase::GetAmbientShowGrabHandles | 检索 DISPID_AMBIENT_SHOWGRABHANDLES,这是一个标志,指示容器是否允许控件在处于活动状态时显示其自身的抓取句柄。 |
CComControlBase::GetAmbientShowHatching | 检索 DISPID_AMBIENT_SHOWHATCHING,这是一个标志,指示当 UI 处于活动状态时容器是否允许控件以阴影图案显示自身。 |
CComControlBase::GetAmbientSupportsMnemonics | 检索 DISPID_AMBIENT_SUPPORTSMNEMONICS,这是一个标志,指示容器是否支持键盘助记键。 |
CComControlBase::GetAmbientTextAlign | 检索 DISPID_AMBIENT_TEXTALIGN,即容器的首选文本对齐方式:0 表示常规对齐(数字右对齐,文本左对齐),1 表示左对齐,2 表示居中对齐,3 表示右对齐。 |
CComControlBase::GetAmbientTopToBottom | 检索 DISPID_AMBIENT_TOPTOBOTTOM,即容器显示内容的方向。 |
CComControlBase::GetAmbientUIDead | 检索 DISPID_AMBIENT_UIDEAD,这是一个标志,指示容器是否希望控件响应用户界面操作。 |
CComControlBase::GetAmbientUserMode | 检索 DISPID_AMBIENT_USERMODE,这是一个标志,指示容器是处于运行模式 (TRUE) 还是设计模式 (FALSE)。 |
CComControlBase::GetDirty | 返回数据成员 m_bRequiresSave 的值。 |
CComControlBase::GetZoomInfo | 检索已激活进行就地编辑的控件的缩放因子的分子和分母的 x 和 y 值。 |
CComControlBase::InPlaceActivate | 使控件从非活动状态转换为 iVerb 中的谓词指示的任何状态。 |
CComControlBase::InternalGetSite | 调用此方法可在控件站点中查询指向已标识的接口的指针。 |
CComControlBase::OnDraw | 重写此方法以绘制控件。 |
CComControlBase::OnDrawAdvanced | 默认的 OnDrawAdvanced 准备用于绘制的规范化设备上下文,然后调用控件类的 OnDraw 方法。 |
CComControlBase::OnKillFocus | 检查控件是否处于就地活动状态并具有有效的控件站点,然后告知容器该控件已失去焦点。 |
CComControlBase::OnMouseActivate | 检查 UI 是否处于用户模式,然后激活控件。 |
CComControlBase::OnPaint | 准备用于绘制的容器,获取控件的工作区,然后调用控件类的 OnDraw 方法。 |
CComControlBase::OnSetFocus | 检查控件是否处于就地活动状态并具有有效的控件站点,然后告知容器该控件已获得焦点。 |
CComControlBase::PreTranslateAccelerator | 重写此方法以提供你自己的键盘加速键处理程序。 |
CComControlBase::SendOnClose | 向已注册到建议保存器的所有建议接收器通知控件已关闭。 |
CComControlBase::SendOnDataChange | 向已注册到建议保存器的所有建议接收器通知控件数据已更改。 |
CComControlBase::SendOnRename | 向已注册到建议保存器的所有建议接收器通知控件具有新的名字对象。 |
CComControlBase::SendOnSave | 向已注册到建议保存器的所有建议接收器通知控件已保存。 |
CComControlBase::SendOnViewChange | 向所有已注册的建议接收器通知控件的视图已更改。 |
CComControlBase::SetControlFocus | 在控件中设置或删除键盘焦点。 |
CComControlBase::SetDirty | 将数据成员 m_bRequiresSave 设置为 bDirty 中的值。 |
公共数据成员
“属性” | 描述 |
---|---|
CComControlBase::m_bAutoSize | 指示控件不能是任何其他大小的标志。 |
CComControlBase::m_bDrawFromNatural | 指示 IDataObjectImpl::GetData 和 CComControlBase::GetZoomInfo 应设置 m_sizeNatural 而不是 m_sizeExtent 中的控件大小的标志。 |
CComControlBase::m_bDrawGetDataInHimetric | 指示在绘制时 IDataObjectImpl::GetData 应使用 HIMETRIC 单位而不是像素的标志。 |
CComControlBase::m_bInPlaceActive | 指示控件处于就地激活状态的标志。 |
CComControlBase::m_bInPlaceSiteEx | 指示容器支持 IOleInPlaceSiteEx 接口和 OCX96 控件功能(例如无窗口和防闪烁控件)的标志。 |
CComControlBase::m_bNegotiatedWnd | 指示控件是否已与容器协商有关支持 OCX96 控件功能(例如防闪烁和无窗口控件)以及控件是有窗口还是无窗口的标志。 |
CComControlBase::m_bRecomposeOnResize | 指示控件希望在容器更改控件的显示大小时重组其表示形式的标志。 |
CComControlBase::m_bRequiresSave | 指示控件自上次保存以来已更改的标志。 |
CComControlBase::m_bResizeNatural | 指示控件希望在容器更改控件的显示大小时调整其自然范围(未缩放的物理大小)的标志。 |
CComControlBase::m_bUIActive | 指示控件的用户界面(例如菜单和工具栏)处于活动状态的标志。 |
CComControlBase::m_bUsingWindowRgn | 指示控件正在使用容器提供的窗口区域的标志。 |
CComControlBase::m_bWasOnceWindowless | 指示控件过去一直无窗口,但现在不一定无窗口的标志。 |
CComControlBase::m_bWindowOnly | 指示即使容器支持无窗口控件,但控件也应该有窗口的标志。 |
CComControlBase::m_bWndLess | 指示控件无窗口的标志。 |
CComControlBase::m_hWndCD | 包含对与控件关联的窗口句柄的引用。 |
CComControlBase::m_nFreezeEvents | 容器冻结事件(拒绝接受事件)但未干预事件解冻(接受事件)的次数。 |
CComControlBase::m_rcPos | 控件的位置(以像素为单位),以容器的坐标表示。 |
CComControlBase::m_sizeExtent | 特定显示器的控件范围,以 HIMETRIC 为单位(每个单位为 0.01 毫米)。 |
CComControlBase::m_sizeNatural | 控件的物理大小,以 HIMETRIC 为单位(每个单位为 0.01 毫米)。 |
CComControlBase::m_spAdviseSink | 指向容器上的建议连接的直接指针(容器的 IAdviseSink)。 |
CComControlBase::m_spAmbientDispatch | 一个 CComDispatchDriver 对象,可用于通过 IDispatch 指针检索和设置容器的属性。 |
CComControlBase::m_spClientSite | 指向容器中控件的客户端站点的指针。 |
CComControlBase::m_spDataAdviseHolder | 提供一种标准方式来保存数据对象与建议接收器之间的建议连接。 |
CComControlBase::m_spInPlaceSite | 指向容器的 IOleInPlaceSite、IOleInPlaceSiteEx 或 IOleInPlaceSiteWindowless 接口指针的指针。 |
CComControlBase::m_spOleAdviseHolder | 提供一个用于保存建议连接的标准实现。 |
注解
此类提供用于创建和管理 ATL 控件的方法。 CComControl 类派生自 CComControlBase
。 使用 ATL 控件向导创建标准控件或 DHTML 控件时,向导将从 CComControlBase
自动派生类。
若要详细了解如何创建控件,请参阅 ATL 教程。 有关 ATL 项目向导的详细信息,请参阅创建 ATL 项目一文。
要求
标头:atlctl.h
CComControlBase::AppearanceType
如果 m_nAppearance
常用属性的类型不是 short
,则重写。
typedef short AppearanceType;
备注
ATL 控件向导添加短类型的 m_nAppearance
常用属性。 如果使用其他数据类型,请重写 AppearanceType
。
CComControlBase::CComControlBase
构造函数。
CComControlBase(HWND& h);
参数
h
与控件关联的窗口的句柄。
注解
将控件大小初始化为 5080X5080 HIMETRIC 单位 (2"X2") 并将 CComControlBase
数据成员值初始化为 NULL 或 FALSE。
CComControlBase::~CComControlBase
析构函数。
~CComControlBase();
注解
如果控件有窗口,~CComControlBase
将通过调用 DestroyWindow 销毁窗口。
CComControlBase::ControlQueryInterface
检索指向所请求的接口的指针。
virtual HRESULT ControlQueryInterface(const IID& iid,
void** ppv);
参数
iid
要请求的接口的 GUID。
ppv
指向 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);
CComControlBase::DoesVerbActivate
检查 IOleObjectImpl::DoVerb
使用的 iVerb 参数是激活控件的用户界面(iVerb 等于 OLEIVERB_UIACTIVATE)、定义用户双击控件时执行的操作(iVerb 等于 OLEIVERB_PRIMARY)、显示控件(iVerb 等于 OLEIVERB_SHOW),还是激活控件(iVerb 等于 OLEIVERB_INPLACEACTIVATE)。
BOOL DoesVerbActivate(LONG iVerb);
参数
iVerb
指示要由 DoVerb
执行的操作的值。
返回值
如果 iVerb 等于 OLEIVERB_UIACTIVATE、OLEIVERB_PRIMARY、OLEIVERB_SHOW 或 OLEIVERB_INPLACEACTIVATE,则返回 TRUE;否则返回 FALSE。
备注
可以重写此方法以定义你自己的激活谓词。
CComControlBase::DoesVerbUIActivate
检查 IOleObjectImpl::DoVerb
使用的 iVerb 参数是否导致控件的用户界面激活并返回 TRUE。
BOOL DoesVerbUIActivate(LONG iVerb);
参数
iVerb
指示要由 DoVerb
执行的操作的值。
返回值
如果 iVerb 等于 OLEIVERB_UIACTIVATE、OLEIVERB_PRIMARY、OLEIVERB_SHOW 或 OLEIVERB_INPLACEACTIVATE,则返回 TRUE。 否则该方法返回 FALSE。
CComControlBase::DoVerbProperties
显示控件的属性页。
HRESULT DoVerbProperties(LPCRECT /* prcPosRect */, HWND hwndParent);
参数
prcPosRec
保留。
hwndParent
包含控件的窗口的句柄。
返回值
标准 HRESULT 值之一。
示例
// The following implementation of the WM_RBUTTONDOWN message handler
// will pop up the ActiveX Control's PropertyPages
LRESULT CMyComposite::OnRButtonDown(UINT /*uMsg*/, WPARAM /*wParam*/,
LPARAM /*lParam*/, BOOL& /*bHandled*/)
{
DoVerbProperties(NULL, ::GetActiveWindow());
return 0L;
}
MESSAGE_HANDLER(WM_RBUTTONDOWN, OnRButtonDown)
CComControlBase::FireViewChange
调用此方法可告知容器重绘控件,或向已注册的建议接收器通知控件视图已更改。
HRESULT FireViewChange();
返回值
标准 HRESULT 值之一。
备注
如果控件处于活动状态(控件类数据成员 CComControlBase::m_bInPlaceActive 为 TRUE),则通知容器你想要重绘整个控件。 如果控件处于非活动状态,则通知控件的已注册的建议接收器(通过控件类数据成员 CComControlBase::m_spAdviseSink)控件的视图已更改。
示例
STDMETHODIMP CMyControl::put_Shape(int newVal)
{
// store newVal in m_nShape user-defined member
m_nShape = newVal;
// notify container to redraw control
FireViewChange();
return S_OK;
}
CComControlBase::GetAmbientAppearance
检索 DISPID_AMBIENT_APPEARANCE,即控件的当前外观设置:0 表示平面,1 表示 3D。
HRESULT GetAmbientAppearance(short& nAppearance);
参数
nAppearance
属性 DISPID_AMBIENT_APPEARANCE。
返回值
标准 HRESULT 值之一。
示例
HRESULT OnDraw(ATL_DRAWINFO& di)
{
short nAppearance;
RECT& rc = *(RECT*)di.prcBounds;
// draw 3D border if AmbientAppearance is not supported or is set to 1
HRESULT hr = GetAmbientAppearance(nAppearance);
if (hr != S_OK || nAppearance==1)
{
DrawEdge(di.hdcDraw, &rc, EDGE_SUNKEN, BF_RECT);
}
else
{
Rectangle(di.hdcDraw, rc.left, rc.top, rc.right, rc.bottom);
}
SetTextAlign(di.hdcDraw, TA_CENTER|TA_BASELINE);
LPCTSTR pszText = _T("ATL 8.0 : MyControl");
// For security reasons, we recommend that you use the lstrlen function
// with caution. Here, we can guarantee that pszText is NULL terminated,
// and therefore it is safe to use this function.
TextOut(di.hdcDraw,
(rc.left + rc.right) / 2,
(rc.top + rc.bottom) / 2,
pszText,
lstrlen(pszText));
return S_OK;
}
CComControlBase::GetAmbientAutoClip
检索 DISPID_AMBIENT_AUTOCLIP,这是一个标志,指示容器是否支持自动剪裁控件显示区域。
HRESULT GetAmbientAutoClip(BOOL& bAutoClip);
参数
bAutoClip
属性 DISPID_AMBIENT_AUTOCLIP。
返回值
标准 HRESULT 值之一。
CComControlBase::GetAmbientBackColor
检索 DISPID_AMBIENT_BACKCOLOR,即所有控件的环境背景色,由容器定义。
HRESULT GetAmbientBackColor(OLE_COLOR& BackColor);
参数
BackColor
属性 DISPID_AMBIENT_BACKCOLOR。
返回值
标准 HRESULT 值之一。
CComControlBase::GetAmbientCharSet
检索 DISPID_AMBIENT_CHARSET,即所有控件的环境字符集,由容器定义。
HRESULT GetAmbientCharSet(BSTR& bstrCharSet);
参数
bstrCharSet
属性 DISPID_AMBIENT_CHARSET。
返回值
如果成功,则返回 S_OK;否则返回错误 HRESULT。
CComControlBase::GetAmbientCodePage
检索 DISPID_AMBIENT_CODEPAGE,即所有控件的环境代码页,由容器定义。
HRESULT GetAmbientCodePage(ULONG& ulCodePage);
参数
ulCodePage
属性 DISPID_AMBIENT_CODEPAGE。
返回值
如果成功,则返回 S_OK;否则返回错误 HRESULT。
CComControlBase::GetAmbientDisplayAsDefault
检索 DISPID_AMBIENT_DISPLAYASDEFAULT,如果容器已将此站点中的控件标记为默认按钮,则该标志为 TRUE,因此按钮控件应使用较粗的框架绘制自身。
HRESULT GetAmbientDisplayAsDefault(BOOL& bDisplayAsDefault);
参数
bDisplayAsDefault
属性 DISPID_AMBIENT_DISPLAYASDEFAULT。
返回值
标准 HRESULT 值之一。
CComControlBase::GetAmbientDisplayName
检索 DISPID_AMBIENT_DISPLAYNAME,即容器提供给控件的名称。
HRESULT GetAmbientDisplayName(BSTR& bstrDisplayName);
参数
bstrDisplayName
属性 DISPID_AMBIENT_DISPLAYNAME。
返回值
标准 HRESULT 值之一。
CComControlBase::GetAmbientFont
检索指向容器的环境 IFont
接口的指针。
HRESULT GetAmbientFont(IFont** ppFont);
参数
ppFont
指向容器的环境 IFont 接口的指针。
返回值
标准 HRESULT 值之一。
备注
如果该属性为 NULL,则指针为 NULL。 如果指针不为 NULL,则调用方必须释放指针。
CComControlBase::GetAmbientFontDisp
检索指向容器的环境 IFontDisp
调度接口的指针。
HRESULT GetAmbientFontDisp(IFontDisp** ppFont);
参数
ppFont
指向容器的环境 IFontDisp 调度接口的指针。
返回值
如果成功,则返回 S_OK;否则返回错误 HRESULT。
注解
如果该属性为 NULL,则指针为 NULL。 如果指针不为 NULL,则调用方必须释放指针。
CComControlBase::GetAmbientForeColor
检索 DISPID_AMBIENT_FORECOLOR,即所有控件的环境前景色,由容器定义。
HRESULT GetAmbientForeColor(OLE_COLOR& ForeColor);
参数
ForeColor
属性 DISPID_AMBIENT_FORECOLOR。
返回值
标准 HRESULT 值之一。
CComControlBase::GetAmbientLocaleID
检索 DISPID_AMBIENT_LOCALEID,即容器使用的语言的标识符。
HRESULT GetAmbientLocaleID(LCID& lcid);
参数
lcid
属性 DISPID_AMBIENT_LOCALEID。
返回值
标准 HRESULT 值之一。
注解
控件可以使用此标识符来使其用户界面适应不同的语言。
CComControlBase::GetAmbientMessageReflect
检索 DISPID_AMBIENT_MESSAGEREFLECT,这是一个标志,指示容器是否希望接收窗口消息(例如 WM_DRAWITEM
)作为事件。
HRESULT GetAmbientMessageReflect(BOOL& bMessageReflect);
参数
bMessageReflect
属性 DISPID_AMBIENT_MESSAGEREFLECT。
返回值
标准 HRESULT 值之一。
CComControlBase::GetAmbientPalette
检索用于访问容器的 HPALETTE 的 DISPID_AMBIENT_PALETTE。
HRESULT GetAmbientPalette(HPALETTE& hPalette);
参数
hPalette
属性 DISPID_AMBIENT_PALETTE。
返回值
标准 HRESULT 值之一。
CComControlBase::GetAmbientProperty
检索 dispid 指定的容器属性。
HRESULT GetAmbientProperty(DISPID dispid, VARIANT& var);
参数
dispid
要检索的容器属性的标识符。
var
用于接收属性的变量。
返回值
标准 HRESULT 值之一。
备注
ATL 提供了一组帮助器函数来检索特定的属性,例如 CComControlBase::GetAmbientBackColor。 如果没有适用的方法,请使用 GetAmbientProperty
。
CComControlBase::GetAmbientRightToLeft
检索 DISPID_AMBIENT_RIGHTTOLEFT,即容器显示内容的方向。
HRESULT GetAmbientRightToLeft(BOOL& bRightToLeft);
参数
bRightToLeft
属性 DISPID_AMBIENT_RIGHTTOLEFT。 如果内容从右到左显示,则设置为 TRUE;如果从左到右显示,则设置为 FALSE。
返回值
如果成功,则返回 S_OK;否则返回错误 HRESULT。
CComControlBase::GetAmbientScaleUnits
检索 DISPID_AMBIENT_SCALEUNITS,即容器用于显示标记的环境单位(例如英寸或厘米)。
HRESULT GetAmbientScaleUnits(BSTR& bstrScaleUnits);
参数
bstrScaleUnits
属性 DISPID_AMBIENT_SCALEUNITS。
返回值
标准 HRESULT 值之一。
CComControlBase::GetAmbientShowGrabHandles
检索 DISPID_AMBIENT_SHOWGRABHANDLES,这是一个标志,指示容器是否允许控件在处于活动状态时显示其自身的抓取句柄。
HRESULT GetAmbientShowGrabHandles(BOOL& bShowGrabHandles);
参数
bShowGrabHandles
属性 DISPID_AMBIENT_SHOWGRABHANDLES。
返回值
标准 HRESULT 值之一。
CComControlBase::GetAmbientShowHatching
检索 DISPID_AMBIENT_SHOWHATCHING,这是一个标志,指示当控件的用户界面处于活动状态时容器是否允许控件以阴影图案显示自身。
HRESULT GetAmbientShowHatching(BOOL& bShowHatching);
参数
bShowHatching
属性 DISPID_AMBIENT_SHOWHATCHING。
返回值
标准 HRESULT 值之一。
CComControlBase::GetAmbientSupportsMnemonics
检索 DISPID_AMBIENT_SUPPORTSMNEMONICS,这是一个标志,指示容器是否支持键盘助记键。
HRESULT GetAmbientSupportsMnemonics(BOOL& bSupportsMnemonics);
参数
bSupportsMnemonics
属性 DISPID_AMBIENT_SUPPORTSMNEMONICS。
返回值
标准 HRESULT 值之一。
CComControlBase::GetAmbientTextAlign
检索 DISPID_AMBIENT_TEXTALIGN,即容器的首选文本对齐方式:0 表示常规对齐(数字右对齐,文本左对齐),1 表示左对齐,2 表示居中对齐,3 表示右对齐。
HRESULT GetAmbientTextAlign(short& nTextAlign);
参数
nTextAlign
属性 DISPID_AMBIENT_TEXTALIGN。
返回值
标准 HRESULT 值之一。
CComControlBase::GetAmbientTopToBottom
检索 DISPID_AMBIENT_TOPTOBOTTOM,即容器显示内容的方向。
HRESULT GetAmbientTopToBottom(BOOL& bTopToBottom);
参数
bTopToBottom
属性 DISPID_AMBIENT_TOPTOBOTTOM。 如果文本从上到下显示,则设置为 TRUE;如果从下到上显示,则设置为 FALSE。
返回值
如果成功,则返回 S_OK;否则返回错误 HRESULT。
CComControlBase::GetAmbientUIDead
检索 DISPID_AMBIENT_UIDEAD,这是一个标志,指示容器是否希望控件响应用户界面操作。
HRESULT GetAmbientUIDead(BOOL& bUIDead);
参数
bUIDead
属性 DISPID_AMBIENT_UIDEAD。
返回值
标准 HRESULT 值之一。
注解
如果为 TRUE,则控件不应做出响应。 无论 DISPID_AMBIENT_USERMODE 标志是什么,此标志都适用。 请参阅 CComControlBase::GetAmbientUserMode。
CComControlBase::GetAmbientUserMode
检索 DISPID_AMBIENT_USERMODE,这是一个标志,指示容器是处于运行模式 (TRUE) 还是设计模式 (FALSE)。
HRESULT GetAmbientUserMode(BOOL& bUserMode);
参数
bUserMode
属性 DISPID_AMBIENT_USERMODE。
返回值
标准 HRESULT 值之一。
CComControlBase::GetDirty
返回数据成员 m_bRequiresSave
的值。
BOOL GetDirty();
返回值
返回数据成员 m_bRequiresSave 的值。
注解
此值是使用 CComControlBase::SetDirty 设置的。
CComControlBase::GetZoomInfo
检索已激活进行就地编辑的控件的缩放因子的分子和分母的 x 和 y 值。
void GetZoomInfo(ATL_DRAWINFO& di);
参数
di
用于保存缩放因子的分子和分母的结构。 有关详细信息,请参阅 ATL_DRAWINFO。
注解
缩放因子是控件的自然大小与其当前范围的比例。
CComControlBase::InPlaceActivate
使控件从非活动状态转换为 iVerb 中的谓词指示的任何状态。
HRESULT InPlaceActivate(LONG iVerb, const RECT* prcPosRect = NULL);
参数
iVerb
指示要由 IOleObjectImpl::DoVerb 执行的操作的值。
prcPosRect
指向就地控件位置的指针。
返回值
标准 HRESULT 值之一。
备注
在激活之前,此方法将检查控件是否具有客户端站点,检查有多少控件可见,并获取控件在父窗口中的位置。 控件激活后,此方法将激活控件的用户界面并告知容器使控件可见。
此方法还将检索控件的 IOleInPlaceSite
、IOleInPlaceSiteEx
或 IOleInPlaceSiteWindowless
接口指针,并将其存储在控件类的数据成员 CComControlBase::m_spInPlaceSite 中。 控件类数据成员 CComControlBase::m_bInPlaceSiteEx、CComControlBase::m_bWndLess、CComControlBase::m_bWasOnceWindowless 和 CComControlBase::m_bNegotiatedWnd 在适当情况下设置为 true。
CComControlBase::InternalGetSite
调用此方法可在控件站点中查询指向已标识的接口的指针。
HRESULT InternalGetSite(REFIID riid, void** ppUnkSite);
参数
riid
应在 ppUnkSite 中返回的接口指针的 IID。
ppUnkSite
接收 riid 中请求的接口指针的指针变量的地址。
返回值
如果成功,则返回 S_OK;否则返回错误 HRESULT。
注解
如果站点支持 riid 中请求的接口,则通过 ppUnkSite 返回指针。 否则,ppUnkSite 设置为 NULL。
CComControlBase::m_bAutoSize
指示控件不能是任何其他大小的标志。
unsigned m_bAutoSize:1;
备注
此标志由 IOleObjectImpl::SetExtent
检查,如果为 TRUE,则导致函数返回 E_FAIL。
注意
若要在控件类中使用此数据成员,必须将其声明为控件类中的数据成员。 控件类不会从基类继承此数据成员,因为它是在基类的并集中声明的。
如果在 ATL 控件向导的“常用属性”选项卡上添加“自动调整大小”选项,则该向导会自动在控件类中创建此数据成员,为属性创建 put 和 get 方法,并支持使用 IPropertyNotifySink 在属性更改时自动通知容器。
CComControlBase::m_bDrawFromNatural
指示 IDataObjectImpl::GetData
和 CComControlBase::GetZoomInfo
应设置 m_sizeNatural
而不是 m_sizeExtent
中的控件大小的标志。
unsigned m_bDrawFromNatural:1;
注解
注意
若要在控件类中使用此数据成员,必须将其声明为控件类中的数据成员。 控件类不会从基类继承此数据成员,因为它是在基类的并集中声明的。
CComControlBase::m_bDrawGetDataInHimetric
指示在绘制时 IDataObjectImpl::GetData
应使用 HIMETRIC 单位而不是像素的标志。
unsigned m_bDrawGetDataInHimetric:1;
备注
每个逻辑 HIMETRIC 单位为 0.01 毫米。
注意
若要在控件类中使用此数据成员,必须将其声明为控件类中的数据成员。 控件类不会从基类继承此数据成员,因为它是在基类的并集中声明的。
CComControlBase::m_bInPlaceActive
指示控件处于就地激活状态的标志。
unsigned m_bInPlaceActive:1;
备注
这表示控件可见,并且其窗口(如果有)可见,但其菜单和工具栏可能不处于活动状态。 m_bUIActive
标志指示控件的用户界面(例如菜单)也处于活动状态。
注意
若要在控件类中使用此数据成员,必须将其声明为控件类中的数据成员。 控件类不会从基类继承此数据成员,因为它是在基类的并集中声明的。
CComControlBase::m_bInPlaceSiteEx
指示容器支持 IOleInPlaceSiteEx
接口和 OCX96 控件功能(例如无窗口和防闪烁控件)的标志。
unsigned m_bInPlaceSiteEx:1;
注解
注意
若要在控件类中使用此数据成员,必须将其声明为控件类中的数据成员。 控件类不会从基类继承此数据成员,因为它是在基类的并集中声明的。
数据成员 m_spInPlaceSite
指向 IOleInPlaceSite、IOleInPlaceSiteEx 或 IOleInPlaceSiteWindowless 接口,具体取决于 m_bWndLess
和 m_bInPlaceSiteEx
标志的值。 (数据成员 m_bNegotiatedWnd
必须为 TRUE 才能使 m_spInPlaceSite
指针有效。)
如果 m_bWndLess
为 FALSE 且 m_bInPlaceSiteEx
为 TRUE,则 m_spInPlaceSite
是 IOleInPlaceSiteEx
接口指针。 请参阅 m_spInPlaceSite 中显示了这三个数据成员之间的关系的表格。
CComControlBase::m_bNegotiatedWnd
指示控件是否已与容器协商有关支持 OCX96 控件功能(例如防闪烁和无窗口控件)以及控件是有窗口还是无窗口的标志。
unsigned m_bNegotiatedWnd:1;
备注
注意
若要在控件类中使用此数据成员,必须将其声明为控件类中的数据成员。 控件类不会从基类继承此数据成员,因为它是在基类的并集中声明的。
m_bNegotiatedWnd
标志必须为 TRUE 才能使 m_spInPlaceSite
指针有效。
CComControlBase::m_bRecomposeOnResize
指示控件希望在容器更改控件的显示大小时重组其表示形式的标志。
unsigned m_bRecomposeOnResize:1;
备注
注意
若要在控件类中使用此数据成员,必须将其声明为控件类中的数据成员。 控件类不会从基类继承此数据成员,因为它是在基类的并集中声明的。
此标志由 IOleObjectImpl::SetExtent 检查,如果为 TRUE,则 SetExtent
会向容器通知视图已更改。 如果设置了此标志,则还应设置 OLEMISC 枚举中的 OLEMISC_RECOMPOSEONRESIZE 位。
CComControlBase::m_bRequiresSave
指示控件自上次保存以来已更改的标志。
unsigned m_bRequiresSave:1;
备注
m_bRequiresSave
的值可以使用 CComControlBase::SetDirty 来设置并使用 CComControlBase::GetDirty 来检索。
注意
若要在控件类中使用此数据成员,必须将其声明为控件类中的数据成员。 控件类不会从基类继承此数据成员,因为它是在基类的并集中声明的。
CComControlBase::m_bResizeNatural
指示控件希望在容器更改控件的显示大小时调整其自然范围(未缩放的物理大小)的标志。
unsigned m_bResizeNatural:1;
备注
此标志由 IOleObjectImpl::SetExtent
检查,如果为 TRUE,则会将传递给 SetExtent
的大小分配到 m_sizeNatural
。
无论 m_bResizeNatural
的值如何,传递给 SetExtent
的大小始终会分配到 m_sizeExtent
。
注意
若要在控件类中使用此数据成员,必须将其声明为控件类中的数据成员。 控件类不会从基类继承此数据成员,因为它是在基类的并集中声明的。
CComControlBase::m_bUIActive
指示控件的用户界面(例如菜单和工具栏)处于活动状态的标志。
unsigned m_bUIActive:1;
备注
m_bInPlaceActive
标志指示控件处于活动状态,但不指示其用户界面处于活动状态。
注意
若要在控件类中使用此数据成员,必须将其声明为控件类中的数据成员。 控件类不会从基类继承此数据成员,因为它是在基类的并集中声明的。
CComControlBase::m_bUsingWindowRgn
指示控件正在使用容器提供的窗口区域的标志。
unsigned m_bUsingWindowRgn:1;
注解
注意
若要在控件类中使用此数据成员,必须将其声明为控件类中的数据成员。 控件类不会从基类继承此数据成员,因为它是在基类的并集中声明的。
CComControlBase::m_bWasOnceWindowless
指示控件过去一直无窗口,但现在不一定无窗口的标志。
unsigned m_bWasOnceWindowless:1;
注解
注意
若要在控件类中使用此数据成员,必须将其声明为控件类中的数据成员。 控件类不会从基类继承此数据成员,因为它是在基类的并集中声明的。
CComControlBase::m_bWindowOnly
指示即使容器支持无窗口控件,但控件也应该有窗口的标志。
unsigned m_bWindowOnly:1;
注解
注意
若要在控件类中使用此数据成员,必须将其声明为控件类中的数据成员。 控件类不会从基类继承此数据成员,因为它是在基类的并集中声明的。
CComControlBase::m_bWndLess
指示控件无窗口的标志。
unsigned m_bWndLess:1;
备注
注意
若要在控件类中使用此数据成员,必须将其声明为控件类中的数据成员。 控件类不会从基类继承此数据成员,因为它是在基类的并集中声明的。
数据成员 m_spInPlaceSite
指向 IOleInPlaceSite、IOleInPlaceSiteEx 或 IOleInPlaceSiteWindowless 接口,具体取决于 m_bWndLess
和 CComControlBase::m_bInPlaceSiteEx 标志的值。 (数据成员 CComControlBase::m_bNegotiatedWnd 必须为 TRUE 才能使 CComControlBase::m_spInPlaceSite 指针有效。)
如果 m_bWndLess
为 TRUE,则 m_spInPlaceSite
是 IOleInPlaceSiteWindowless
接口指针。 请参阅 CComControlBase::m_spInPlaceSite 中显示了这些数据成员之间的完整关系的表格。
CComControlBase::m_hWndCD
包含对与控件关联的窗口句柄的引用。
HWND& m_hWndCD;
备注
注意
若要在控件类中使用此数据成员,必须将其声明为控件类中的数据成员。 控件类不会从基类继承此数据成员,因为它是在基类的并集中声明的。
CComControlBase::m_nFreezeEvents
容器冻结事件(拒绝接受事件)但未干预事件解冻(接受事件)的次数。
short m_nFreezeEvents;
备注
注意
若要在控件类中使用此数据成员,必须将其声明为控件类中的数据成员。 控件类不会从基类继承此数据成员,因为它是在基类的并集中声明的。
CComControlBase::m_rcPos
控件的位置(以像素为单位),以容器的坐标表示。
RECT m_rcPos;
备注
注意
若要在控件类中使用此数据成员,必须将其声明为控件类中的数据成员。 控件类不会从基类继承此数据成员,因为它是在基类的并集中声明的。
CComControlBase::m_sizeExtent
特定显示器的控件范围,以 HIMETRIC 为单位(每个单位为 0.01 毫米)。
SIZE m_sizeExtent;
备注
注意
若要在控件类中使用此数据成员,必须将其声明为控件类中的数据成员。 控件类不会从基类继承此数据成员,因为它是在基类的并集中声明的。
此大小由显示器缩放。 控件的物理大小在 m_sizeNatural
数据成员中指定,并且是固定的。
可以使用全局函数 AtlHiMetricToPixel 将大小转换为像素。
CComControlBase::m_sizeNatural
控件的物理大小,以 HIMETRIC 为单位(每个单位为 0.01 毫米)。
SIZE m_sizeNatural;
注解
注意
若要在控件类中使用此数据成员,必须将其声明为控件类中的数据成员。 控件类不会从基类继承此数据成员,因为它是在基类的并集中声明的。
此大小是固定的,而 m_sizeExtent
中的大小由显示器缩放。
可以使用全局函数 AtlHiMetricToPixel 将大小转换为像素。
CComControlBase::m_spAdviseSink
指向容器上的建议连接的直接指针(容器的 IAdviseSink)。
CComPtr<IAdviseSink>
m_spAdviseSink;
注解
注意
若要在控件类中使用此数据成员,必须将其声明为控件类中的数据成员。 控件类不会从基类继承此数据成员,因为它是在基类的并集中声明的。
CComControlBase::m_spAmbientDispatch
一个 CComDispatchDriver
对象,可用于通过 IDispatch
指针检索和设置对象的属性。
CComDispatchDriver m_spAmbientDispatch;
注解
注意
若要在控件类中使用此数据成员,必须将其声明为控件类中的数据成员。 控件类不会从基类继承此数据成员,因为它是在基类的并集中声明的。
CComControlBase::m_spClientSite
指向容器中控件的客户端站点的指针。
CComPtr<IOleClientSite>
m_spClientSite;
备注
注意
若要在控件类中使用此数据成员,必须将其声明为控件类中的数据成员。 控件类不会从基类继承此数据成员,因为它是在基类的并集中声明的。
CComControlBase::m_spDataAdviseHolder
提供一种标准方式来保存数据对象与建议接收器之间的建议连接。
CComPtr<IDataAdviseHolder>
m_spDataAdviseHolder;
备注
注意
若要在控件类中使用此数据成员,必须将其声明为控件类中的数据成员。 控件类不会从基类继承此数据成员,因为它是在基类的并集中声明的。
数据对象是可以传输数据并实现 IDataObject 的控件,其方法指定数据的格式和传输媒体。
接口 m_spDataAdviseHolder
实现 IDataObject::DAdvise 和 IDataObject::DUnadvise 方法来建立和删除与容器的建议连接。 控件的容器必须通过支持 IAdviseSink 接口来实现建议接收器。
CComControlBase::m_spInPlaceSite
指向容器的 IOleInPlaceSite、IOleInPlaceSiteEx 或 IOleInPlaceSiteWindowless 接口指针的指针。
CComPtr<IOleInPlaceSiteWindowless>
m_spInPlaceSite;
注解
注意
若要在控件类中使用此数据成员,必须将其声明为控件类中的数据成员。 控件类不会从基类继承此数据成员,因为它是在基类的并集中声明的。
仅当 m_bNegotiatedWnd 标志为 TRUE 时,m_spInPlaceSite
指针才有效。
下表显示了 m_spInPlaceSite
指针类型如何依赖于 m_bWndLess 和 m_bInPlaceSiteEx 数据成员标志:
m_spInPlaceSite 类型 | m_bWndLess 值 | m_bInPlaceSiteEx 值 |
---|---|---|
IOleInPlaceSiteWindowless |
TRUE | TRUE 或 FALSE |
IOleInPlaceSiteEx |
FALSE | TRUE |
IOleInPlaceSite |
FALSE | FALSE |
CComControlBase::m_spOleAdviseHolder
提供一个用于保存建议连接的标准实现。
CComPtr<IOleAdviseHolder>
m_spOleAdviseHolder;
备注
注意
若要在控件类中使用此数据成员,必须将其声明为控件类中的数据成员。 控件类不会从基类继承此数据成员,因为它是在基类的并集中声明的。
接口 m_spOleAdviseHolder
实现 IOleObject::Advise 和 IOleObject::Unadvise 方法来建立和删除与容器的建议连接。 控件的容器必须通过支持 IAdviseSink 接口来实现建议接收器。
CComControlBase::OnDraw
重写此方法以绘制控件。
virtual HRESULT OnDraw(ATL_DRAWINFO& di);
参数
di
对 ATL_DRAWINFO 结构的引用,该结构包含绘图信息,例如绘图外观、控件边界以及绘图是否经过优化。
返回值
标准 HRESULT 值。
注解
默认的 OnDraw
会删除或还原设备上下文,或者不执行任何操作,具体取决于 CComControlBase::OnDrawAdvanced 中设置的标志。
当你使用 ATL 控件向导创建控件时,系统会自动将 OnDraw
方法添加到控件类。 向导的默认 OnDraw
会绘制一个带有标签“ATL 8.0”的矩形。
示例
请参阅 CComControlBase::GetAmbientAppearance 的示例。
CComControlBase::OnDrawAdvanced
默认的 OnDrawAdvanced
准备用于绘制的规范化设备上下文,然后调用控件类的 OnDraw
方法。
virtual HRESULT OnDrawAdvanced(ATL_DRAWINFO& di);
参数
di
对 ATL_DRAWINFO 结构的引用,该结构包含绘图信息,例如绘图外观、控件边界以及绘图是否经过优化。
返回值
标准 HRESULT 值。
备注
如果你想要接受容器传递的设备上下文而不对其进行规范化,请重写此方法。
有关详细信息,请参阅 CComControlBase::OnDraw。
CComControlBase::OnKillFocus
检查控件是否处于就地活动状态并具有有效的控件站点,然后告知容器该控件已失去焦点。
LRESULT OnKillFocus(UINT /* nMsg */,
WPARAM /* wParam */,
LPARAM /* lParam */,
BOOL& bHandled);
参数
nMsg
保留。
wParam
保留。
lParam
保留。
bHandled
指示窗口消息是否已成功处理的标志。 默认值为 FALSE。
返回值
始终返回 1。
CComControlBase::OnMouseActivate
检查 UI 是否处于用户模式,然后激活控件。
LRESULT OnMouseActivate(UINT /* nMsg */,
WPARAM /* wParam */,
LPARAM /* lParam */,
BOOL& bHandled);
参数
nMsg
保留。
wParam
保留。
lParam
保留。
bHandled
指示窗口消息是否已成功处理的标志。 默认值为 FALSE。
返回值
始终返回 1。
CComControlBase::OnPaint
准备用于绘制的容器,获取控件的工作区,然后调用控件类的 OnDrawAdvanced
方法。
LRESULT OnPaint(UINT /* nMsg */,
WPARAM wParam,
LPARAM /* lParam */,
BOOL& /* lResult */);
参数
nMsg
保留。
wParam
现有的 HDC。
lParam
保留。
lResult
保留。
返回值
始终返回零。
备注
如果 wParam 不为 NULL,则 OnPaint
假设它包含有效的 HDC,并使用它而不是 CComControlBase::m_hWndCD。
CComControlBase::OnSetFocus
检查控件是否处于就地活动状态并具有有效的控件站点,然后告知容器该控件已获得焦点。
LRESULT OnSetFocus(UINT /* nMsg */,
WPARAM /* wParam */,
LPARAM /* lParam */,
BOOL& bHandled);
参数
nMsg
保留。
wParam
保留。
lParam
保留。
bHandled
指示窗口消息是否已成功处理的标志。 默认值为 FALSE。
返回值
始终返回 1。
备注
向容器发送控件已接收焦点的通知。
CComControlBase::PreTranslateAccelerator
重写此方法以提供你自己的键盘加速键处理程序。
BOOL PreTranslateAccelerator(LPMSG /* pMsg */,
HRESULT& /* hRet */);
参数
pMsg
保留。
hRet
保留。
返回值
默认返回 FALSE。
CComControlBase::SendOnClose
向已注册到建议保存器的所有建议接收器通知控件已关闭。
HRESULT SendOnClose();
返回值
如果成功,则返回 S_OK;否则返回错误 HRESULT。
注解
发送控件已关闭其建议接收器的通知。
CComControlBase::SendOnDataChange
向已注册到建议保存器的所有建议接收器通知控件数据已更改。
HRESULT SendOnDataChange(DWORD advf = 0);
参数
advf
用于指定如何向 IAdviseSink::OnDataChange 发出调用的建议标志。 值来自 ADVF 枚举。
返回值
如果成功,则返回 S_OK;否则返回错误 HRESULT。
CComControlBase::SendOnRename
向已注册到建议保存器的所有建议接收器通知控件具有新的名字对象。
HRESULT SendOnRename(IMoniker* pmk);
参数
pmk
指向控件的新名字对象的指针。
返回值
如果成功,则返回 S_OK;否则返回错误 HRESULT。
注解
发送控件的名字对象已更改的通知。
CComControlBase::SendOnSave
向已注册到建议保存器的所有建议接收器通知控件已保存。
HRESULT SendOnSave();
返回值
如果成功,则返回 S_OK;否则返回错误 HRESULT。
注解
发送控件刚刚保存其数据的通知。
CComControlBase::SendOnViewChange
向所有已注册的建议接收器通知控件的视图已更改。
HRESULT SendOnViewChange(DWORD dwAspect, LONG lindex = -1);
参数
dwAspect
控件的外观或视图。
lindex
已更改的视图部分。 只有 -1 有效。
返回值
如果成功,则返回 S_OK;否则返回错误 HRESULT。
注解
SendOnViewChange
调用 IAdviseSink::OnViewChange。 目前支持的 lindex 值只有 -1,此值指示整个视图都是相关的。
CComControlBase::SetControlFocus
在控件中设置或删除键盘焦点。
BOOL SetControlFocus(BOOL bGrab);
参数
bGrab
如果为 TRUE,则将键盘焦点设置为调用控件。 如果为 FALSE,则从调用控件中删除键盘焦点,前提是该控件具有焦点。
返回值
如果控件成功接收焦点,则返回 TRUE;否则返回 FALSE。
注解
对于有窗口控件,将调用 Windows API 函数 SetFocus。 对于无窗口控件,将调用 IOleInPlaceSiteWindowless::SetFocus。 通过此调用,无窗口控件将获取键盘焦点并可以响应窗口消息。
CComControlBase::SetDirty
将数据成员 m_bRequiresSave
设置为 bDirty 中的值。
void SetDirty(BOOL bDirty);
参数
bDirty
数据成员 CComControlBase::m_bRequiresSave 的值。
备注
应调用 SetDirty(TRUE)
来标记控件自上次保存以来已更改。 使用 CComControlBase::GetDirty 检索 m_bRequiresSave
的值。