簡介
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 | 禁止用戶修改控制項的特性 |
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 | 指示用哪個特性頁編輯一個特性 |