COleControl
CObject |
└CCmdTarget |
└CWnd |
└COleControl |
COleControl类是一个开发OLE控件的功能强大的基类。它由CWnd类派生,继承了Windows窗口对象的所有功能,并加上了OLE独有的功能,例如事件触发、支持方法和特性等。
OLE控件可以插入到OLE包容器中,并通过事件触发和包容器引发方法和特性的双向系统相互通讯和联系。注意,标准的OLE包容器仅支持OLE控件的基本功能,而不支持OLE控件的扩展特性。当在控件中采取某个动作,就会向包容器发出一个事件,称为事件触发。相反,包容器引发一系列的类似于C++类的成员函数和数据成员的方法和特性来与控件进行通讯。这种方法使开发者可以控制控件的外观,并在产生某些动作时通知包容器。
无窗口控件
OLE控件可在没有窗口的情况下使用。无窗口控件是十分有用的:
·无窗口控件可以是透明和无形的。
·无窗口控件减小了实例的尺寸和创建对象的时间。
控件并不需要窗口。一个窗口提供的服务可以容易地通过一个单一的共享窗口(通常是包容器的)和分派码的一位来提供。有一个窗口通常使对象的复杂度增加。
当使用无窗口激活时,包容器(它有一个窗口)将负责提供本来应由控件自己的窗口提供的服务。例如,如果你的控件需要查询键盘输入焦点、查询鼠标位置或获取一个设备上下文等,都由包容器来提供支持。
COleControl无窗口操作成员函数将调用包容器上的这些操作。
当不能使用无窗口激活时,包容器会向控件的IOleInPlaceObjectWindowless界面(支持无窗口的IOleInPlaceObject的扩展)发送输入消息。在适当调整鼠标坐标后,COleControl实现这些该界面时通过控件的消息映射图分派这些消息。可以通过增加消息映射图的入口点,同处理普通的窗口消息一样处理这些消息。
在无窗口控件中,通常需要使用COleControl成员函数来代替相应的成员函数或相关的Windows API函数。
只有在OLE控件对象活动时,它们也能创建窗口。但是对象进行不活动-活动切换的工作量增大,速度也会下降。这可能会引发一些问题:
例如在文本框的栅格中,当光标在列间上下移动时,每个控件都先被就地激活,然后取消。这样不活动/活动切换的速度将直接影响滚动的速度。
关于开发一个OLE控件框架的信息,请参阅联机文档“Visual C++程序员指南”中的“ActiveX控件”和“用ActiveX ControlWizard创建程序”。关于向一个基本框架基础上增加功能的信息,请参阅联机文档“Visual C++程序员指南”中的“建立一个ActiveX控件”。关于OLE控件优化的信息,包括无窗口和flicker-free控件,请参阅联机文档“Visual C++程序员指南”中的“ActiveX控件:优化”。
#include <afxctl.h>
请参阅:
COlePropertyPage, CFontHolder, CPictureHolder
COleControl类的成员
构造函数/析构函数
COleControl | 创建一个COleControl对象 |
RecreateControlWindow | 销毁并重建控件的窗口 |
初始化
InitializeIIDs | 将控件将要使用的IIDs通知基类 |
ResetStockProps | 初始化COleControl的标准特性为缺省值 |
ResetVersion | 将版本数设置为给定值 |
SetInitialSize | 设置一个OLE控件第一次在包容器中显示的尺寸 |
控件修改函数
GetControlFlags | 存取控件标志设置 |
IsModified | 判定控件的状态是否已经改变 |
SetModifiedFlag | 改变一个控件的修改状态 |
ExchangeExtent | 串行化控件的宽度和高度 |
ExchangeStockProps | 串行化控件的标准特性 |
ExchangeVersion | 串行化控件的版本号 |
IsConvertingVBX | 允许OLE控件的指定装入 |
SerializeExtent | 串行化或初始化控件的显示空间 |
SerializeStockProps | 串行化或初始化COleControl标准特性 |
SerializeVersion | 串行化或初始化控件的版本信息 |
SetModifiedFlag | 改变控件的修改状态 |
WillAmbientsBeValidDuringLoad | 决定环境特性在控件下次装入时是否可用 |
更新/绘画函数
DoSuperclassPaint | 重画一个从Windows控件派生的OLE控件 |
InvalidateControl | 使一个已经显示的控件的区域无效,导致重画控件 |
IsOptimizedDraw | 指示包容器是否支持当前绘画操作的优化 |
SelectFontObject | 为一个设备上下文选定自定义Font特性 |
SelectStockFont | 为一个设备上下文选定标准Font特性 |
TranslateColor | 将OLE_COLOR值转换为一个COLORREF值 |
分派异常
GetNotSupported | 禁止用户存取控件的特性 |
SetNotPermitted | 指示编辑请求失败 |
SetNotSupported | 禁止用户修改控件的特性 |
ThrowError | OLE控件出错时发出信号 |
环境属性函数
AmbientBackColor | 返回环境BackColor特性的值 |
AmbientDisplayName | 返回由包容器说明的控件名称 |
AmbientForeColor | 返回环境ForeColor特性的值 |
AmbientFont | 返回环境Font特性的值 |
AmbientLocaleID | 返回包容器的本地标识(ID) |
AmbientScaleUnits | 返回包容器使用的单位名称 |
AmbientShowGrabHandles | 决定是否要显示抓取句柄 |
AmbientShowHatching | 决定是否显示阴影 |
AmbientTextAlign | 返回包容器说明的文本对齐方式 |
AmbientUIDead | 决定控件是否要响应用户动作 |
AmbientUserMode | 决定包容器模式 |
GetAmbientProperty | 返回指定的环境变量值 |
事件触发函数
FireClick | 触发标准Click事件 |
FireDblClick | 触发标准DblClick事件 |
FireError | 触发标准Error事件FireEvent触发一个自定义事件 |
FireKeyDown | 触发标准KeyDown事件 |
FireKeyPress | 触发标准KeyPress事件 |
FireKeyUp | 触发标准KeyUp事件 |
FireMouseDown | 触发标准MouseDown事件 |
FireMouseMove | 触发标准MouseMove事件 |
FireMouseUp | 触发标准MouseUp事件 |
FireReadyStateChange | 当控件的就绪状态改变时,触发一个事件 |
标准方法和属性
DoClick | 执行标准DoClick方法 |
Refresh | 重画控件外观 |
GetAppearance | 返回标准Appearance特性的值 |
SetAppearance | 设置标准Appearance特性的值 |
GetBackColor | 返回标准BackColor特性的值 |
SetBackColor | 设置标准BackColor特性的值 |
GetBorderStyle | 返回标准BorderStyle特性的值 |
SetBorderStyle | 设置标准BorderStyle特性的值 |
GetEnabled | 发挥标准Enabled 特性的值 |
SetEnabled | 设置标准Enabled 特性的值 |
GetForeColor | 返回标准ForeColor特性的值 |
SetForeColor | 设置标准ForeColor特性的值 |
GetFont | 返回标准Font特性的值 |
SetFont | 设置标准Font特性的值 |
GetText | 返回标准Text或Caption特性的值 |
SetText | 设置标准Text或Caption特性的值 |
GetFontTextMetrics | 返回CFontHolder对象的度量 |
GetStockTextMetrics | 返回标准Font特性的度量 |
InternalGetFont | 返回CFontHolder对象的标准Font特性的值 |
InternalGetText | 获取标准Text或Caption特性 |
SelectStockFont | 选择控件的标准Font特性到设备上下文中 |
GetHwnd | 返回标准hWnd特性的值 |
OLE控件的尺寸函数
GetControlSize | 返回OLE控件的位置和尺寸 |
SetControlSize | 设置OLE控件的位置和尺寸 |
GetRectInContainer | 返回控件相对它的包容器的矩形边界 |
SetRectInContainer | 设置控件相对它的包容器的矩形边界 |
OLE数据绑定函数
BoundPropertyChanged | 通知包容器,说明绑定特性已经改变 |
BoundPropertyRequestEdit | 申请编辑特性值的许可权限 |
简单框架函数
EnableSimpleFrame | 使控件支持简单框架 |
OLE控件位置函数
ControlInfoChanged | 控件处理的助记符改变后调用该函数 |
GetClientSite | 查询在包容器内的对象的当前客户区指针 |
GetExtendedControl | 获取属于该包容器的一个扩展控件对象的指针 |
LockInPlaceActive | 决定控件能否被包容器取消 |
TransformCoords | 在包容器和控件之间变换坐标 |
模态对话框函数
PreModalDialog | 通知包容器,说明将显示一个模态对话框 |
PostModalDialog | 通知包容器,说明一个模态对话框已被关闭 |
无窗口操作
ClipCaretRect | 一个脱字符号被控件覆盖,调整它的矩形边界 |
GetCapture | 决定一个无窗口、活动控件对象是否获得鼠标捕获焦点 |
GetClientRect | 获取控件客户区的尺寸 |
GetDC | 提供无窗口控件从它的包容器获得设备上下文的途径 |
GetFocus | 决定一个控件是否具有输入焦点 |
GetWindowlessDropTarget | 覆盖该函数,允许无窗口控件成为拖放操作的目标 |
InvalidateRgn | 使包容器窗口的客户区在给定区域内无效。用于重画该区域内的无窗口控件 |
OnWindowlessMessage | 处理无窗口控件的窗口消息(鼠标和键盘消息除外) |
ReleaseCapture | 释放鼠标捕获焦点 |
ReleaseDC | 释放无窗口控件的包容器的显示设备上下文 |
ScrollWindow | 允许无窗口控件在屏幕上滚动它的活动图象的一个区域 |
SetCapture | 使控件的包容器窗口取代控件的鼠标捕获焦点 |
SetFocus | 使控件的包容器窗口取代控件的输入焦点 |
非活动指针处理函数
ClientToParent | 将相对控件原点的点平移到相对它的包容器原点的点 |
GetActivationPolicy | 改变支持IPointerInactive界面的控件的缺省激活行为 |
GetClientOffset | 获取控件矩形区域左上角和它的客户区左上角的差别 |
OnInactiveMouseMove | 覆盖该函数,使鼠标指示下的非活动控件的包容器向控件分派WM_MOUSEMOVE消息 |
OnInactiveSetCursor | 覆盖该函数,使鼠标指示下的非活动控件的包容器像控件分派WM_SETCURSOR消息 |
ParentToClient | 将相对包容器原点的点平移到相对它的控件原点的点 |
异步控制函数
GetReadyState | 返回控件的就绪状态 |
InternalSetReadyState | 设置控件的就绪状态,触发就绪状态改变事件 |
Load | 重新设置先前的异步数据,初始化新装控件异步特性 |
可覆盖的函数
DisplayError | 向控件用户显示标准Error事件 |
DoPropExchange | 串行化COleControl对象特性 |
GetClassID | 获取控件的OLE类标识 |
GetMessageString | 为菜单项提供状态栏文本 |
IsSubclassedControl | 判定控件是否为Windows控件的子类 |
OnClick | 调用它触发标准Click事件 |
OnDoVerb | 执行一个控件动词后调用该函数 |
OnDraw | 当用户要求重画时调用该函数 |
OnDrawMetaFile | 当控件请求使用一个元文件设备上下文重画时,包容器调用该函数 |
OnEdit | 包容器调用以激活OLE控件的用户界面 |
可覆盖的函数
OnEnumVerbs | 由包容器调用以为控件的动词技术 |
OnEventAdvise | 当事件处理函数和控件建立或断开连接时调用该函数 |
OnKeyDownEvent | 当触发标准KeyDown事件后调用该函数 |
OnKeyPressEvent | 当触发标准KeyPress事件后调用该函数 |
OnKeyUpEvent | 当触发标准KeyUp事件后调用该函数 |
OnProperties | 当执行控件的"Properties"动词后调用该函数 |
OnResetState | 设置控件特性为缺省值 |
改变通知函数
OnAppearanceChanged | 当标准Appearance特性改变时调用该函数 |
OnBackColorChanged | 当标准BackColor特性改变时调用该函数 |
OnBorderStyleChanged | 当标准BorderStyle特性改变时调用该函数 |
OnEnabledChanged | 当标准Enabled特性改变时调用该函数 |
OnFontChanged | 当标准Font特性改变时调用该函数 |
OnForeColorChanged | 当标准ForeColor特性改变时调用该函数 |
OnTextChanged | 当标准Text或Caption特性改变时调用该函数 |
OLE界面通知函数
OnAmbientPropertyChange | 当环境特性改变时调用该函数 |
OnClose | 通知控件,说明调用了IOleControl::Close |
OnFreezeEvents | 当控件事件冻结或解冻时调用该函数 |
OnGetControlInfo | 向包容器提供助记符信息 |
OnMnemonic | 当控件的助记符输入时调用该函数 |
OnRenderData | 框架调用以获取指定格式的数据 |
OnRenderFileData | 框架调用以从文件获取指定格式的数据 |
OnRenderGlobalData | 框架调用以从全局内存获取指定格式的数据 |
OnSetClientSite | 通知控件,说明调用了IOleControl::SetClientSite |
OnSetData | 将控件的数据替换成另一个值 |
OnSetExtent | 当控件的范围改变时调用该函数 |
OnSetObjectRects | 当控件的维改变时调用该函数 |
可覆盖的IViewObject界面通知函数
OnGetColorSet | 通知控件,说明调用了IOleObject::GetColorSet |
OnGetNaturalExtent | 覆盖该函数以获取控件最接近计划尺寸和扩展模式的显示尺寸 |
OnGetViewExtent | 覆盖该函数以获取控件显示区域的尺寸 |
OnGetViewRect | 覆盖该函数将控件尺寸转换为从以指定位置开始的矩形 |
OnGetViewStatus | 覆盖该函数以获取控件的视图状态 |
OnQueryHitPoint | 覆盖该函数以询问控件的显示是否覆盖了一个指定点 |
OnQueryHitRect | 覆盖该函数以询问控件的显示是否覆盖了一个指定矩形内的任意点 |
就地激活函数
OnGetInPlaceMenu | 请求将和包容器菜单合并的控件菜单的句柄 |
OnHideToolBars | 当控件UI取消时,包容器调用该函数 |
OnShowToolBars | 当控件UI 激活时,包容器调用该函数 |
属性浏览函数
OnGetDisplayString | 调用该函数以取得代表一个特性值的字符串 |
OnGetPredefinedStrings | 返回代表一个特性的所有可能值的一组字符串 |
OnGetPredefinedValue | 返回对应一个预定义字符串的值 |
OnMapPropertyToPage | 指示用哪个特性页编辑一个特性 |