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 | 訓示用哪個特性頁編輯一個特性 |