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::GetDataCComControlBase::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 指向容器的 IOleInPlaceSiteIOleInPlaceSiteExIOleInPlaceSiteWindowless 接口指针的指针。
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 值之一。

备注

在激活之前,此方法将检查控件是否具有客户端站点,检查有多少控件可见,并获取控件在父窗口中的位置。 控件激活后,此方法将激活控件的用户界面并告知容器使控件可见。

此方法还将检索控件的 IOleInPlaceSiteIOleInPlaceSiteExIOleInPlaceSiteWindowless 接口指针,并将其存储在控件类的数据成员 CComControlBase::m_spInPlaceSite 中。 控件类数据成员 CComControlBase::m_bInPlaceSiteExCComControlBase::m_bWndLessCComControlBase::m_bWasOnceWindowlessCComControlBase::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::GetDataCComControlBase::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 指向 IOleInPlaceSiteIOleInPlaceSiteExIOleInPlaceSiteWindowless 接口,具体取决于 m_bWndLessm_bInPlaceSiteEx 标志的值。 (数据成员 m_bNegotiatedWnd 必须为 TRUE 才能使 m_spInPlaceSite 指针有效。)

如果 m_bWndLess 为 FALSE 且 m_bInPlaceSiteEx 为 TRUE,则 m_spInPlaceSiteIOleInPlaceSiteEx 接口指针。 请参阅 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 指向 IOleInPlaceSiteIOleInPlaceSiteExIOleInPlaceSiteWindowless 接口,具体取决于 m_bWndLessCComControlBase::m_bInPlaceSiteEx 标志的值。 (数据成员 CComControlBase::m_bNegotiatedWnd 必须为 TRUE 才能使 CComControlBase::m_spInPlaceSite 指针有效。)

如果 m_bWndLess 为 TRUE,则 m_spInPlaceSiteIOleInPlaceSiteWindowless 接口指针。 请参阅 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::DAdviseIDataObject::DUnadvise 方法来建立和删除与容器的建议连接。 控件的容器必须通过支持 IAdviseSink 接口来实现建议接收器。

CComControlBase::m_spInPlaceSite

指向容器的 IOleInPlaceSiteIOleInPlaceSiteExIOleInPlaceSiteWindowless 接口指针的指针。

CComPtr<IOleInPlaceSiteWindowless>
    m_spInPlaceSite;

注解

注意

若要在控件类中使用此数据成员,必须将其声明为控件类中的数据成员。 控件类不会从基类继承此数据成员,因为它是在基类的并集中声明的。

仅当 m_bNegotiatedWnd 标志为 TRUE 时,m_spInPlaceSite 指针才有效。

下表显示了 m_spInPlaceSite 指针类型如何依赖于 m_bWndLessm_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::AdviseIOleObject::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 的值。

另请参阅

CComControl 类
类概述