COleControl
COleControl类是一个开发OLE控件的功能强大的基类。它由CWnd类派生,继承了Windows窗口对象的所有功能,并加上了OLE独有的功能,例如事件触发、支持方法和特性等。
OLE控件可以插入到OLE包容器中,并通过事件触发和包容器引发方法和特性的双向系统相互通讯和联系。注意,标准的OLE包容器仅支持OLE控件的基本功能,而不支持OLE控件的扩展特性。当在控件中采取某个动作,就会向包容器发出一个事件,称为事件触发。相反,包容器引发一系列的类似于C++类的成员函数和数据成员的方法和特性来与控件进行通讯。这种方法使开发者可以控制控件的外观,并在产生某些动作时通知包容器。
无窗口控件
OLE控件可在没有窗口的情况下使用。无窗口控件是十分有用的:
·无窗口控件可以是透明和无形的。
·无窗口控件减小了实例的尺寸和创建对象的时间。
控件并不需要窗口。一个窗口提供的服务可以容易地通过一个单一的共享窗口(通常是包容器的)和分派码的一位来提供。有一个窗口通常使对象的复杂度增加。
当使用无窗口激活时,包容器(它有一个窗口)将负责提供本来应由控件自己的窗口提供的服务。例如,如果你的控件需要查询键盘输入焦点、查询鼠标位置或获取一个设备上下文等,都由包容器来提供支持。
COleControl无窗口操作成员函数将调用包容器上的这些操作。
当不能使用无窗口激活时,包容器会向控件的IOleInPlaceObjectWindowless界面(支持无窗口的IOleInPlaceObject的扩展)发送输入消息。在适当调整鼠标坐标后,COleControl实现这些该界面时通过控件的消息映射图分派这些消息。可以通过增加消息映射图的入口点,同处理普通的窗口消息一样处理这些消息。
在无窗口控件中,通常需要使用COleControl成员函数来代替相应的成员函数或相关的Windows API函数。
只有在OLE控件对象活动时,它们也能创建窗口。但是对象进行不活动-活动切换的工作量增大,速度也会下降。这可能会引发一些问题:
例如在文本框的栅格中,当光标在列间上下移动时,每个控件都先被就地激活,然后取消。这样不活动/活动切换的速度将直接影响滚动的速度。
#include <afxctl.h>
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禁止用户修改控件的特性ThrowErrorOLE控件出错时发出信号
环境属性函数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::CloseOnFreezeEvents当控件事件冻结或解冻时调用该函数OnGetControlInfo向包容器提供助记符信息OnMnemonic当控件的助记符输入时调用该函数OnRenderData框架调用以获取指定格式的数据OnRenderFileData框架调用以从文件获取指定格式的数据OnRenderGlobalData框架调用以从全局内存获取指定格式的数据OnSetClientSite通知控件,说明调用了IOleControl::SetClientSiteOnSetData将控件的数据替换成另一个值OnSetExtent当控件的范围改变时调用该函数OnSetObjectRects当控件的维改变时调用该函数
可覆盖的IViewObject界面通知函数OnGetColorSet通知控件,说明调用了IOleObject::GetColorSetOnGetNaturalExtent覆盖该函数以获取控件最接近计划尺寸和扩展模式的显示尺寸OnGetViewExtent覆盖该函数以获取控件显示区域的尺寸OnGetViewRect覆盖该函数将控件尺寸转换为从以指定位置开始的矩形OnGetViewStatus覆盖该函数以获取控件的视图状态OnQueryHitPoint覆盖该函数以询问控件的显示是否覆盖了一个指定点OnQueryHitRect覆盖该函数以询问控件的显示是否覆盖了一个指定矩形内的任意点
就地激活函数OnGetInPlaceMenu请求将和包容器菜单合并的控件菜单的句柄OnHideToolBars当控件UI取消时,包容器调用该函数OnShowToolBars当控件UI 激活时,包容器调用该函数
属性浏览函数OnGetDisplayString调用该函数以取得代表一个特性值的字符串OnGetPredefinedStrings返回代表一个特性的所有可能值的一组字符串OnGetPredefinedValue返回对应一个预定义字符串的值OnMapPropertyToPage指示用哪个特性页编辑一个特性