共用方式為


COleControl 類別

開發 OLE 控制項的強大基底類別。

語法

class COleControl : public CWnd

成員

公用建構函式

名稱 描述
COleControl::COleControl 建立 COleControl 物件。

公用方法

名稱 描述
COleControl::AmbientAppearance 擷取控件的目前外觀。
COleControl::AmbientBackColor 傳回環境 BackColor 屬性的值。
COleControl::AmbientDisplayName 傳回容器所指定之控件的名稱。
COleControl::AmbientFont 傳回環境 Font 屬性的值。
COleControl::AmbientForeColor 傳回環境 ForeColor 屬性的值。
COleControl::AmbientLocaleID 傳回容器的地區設定標識碼。
COleControl::AmbientScaleUnits 傳回容器所使用的單位類型。
COleControl::AmbientShowGrabHandles 判斷是否應該顯示抓取控點。
COleControl::AmbientShowHatching 判斷是否應該顯示影線。
COleControl::AmbientTextAlign 傳回容器所指定的文字對齊類型。
COleControl::AmbientUIDead 判斷控制項是否應該回應使用者介面動作。
COleControl::AmbientUserMode 決定容器的模式。
COleControl::BoundPropertyChanged 通知容器系結屬性已變更。
COleControl::BoundPropertyRequestEdit 要求編輯屬性值的許可權。
COleControl::ClientToParent 將相對於控件來源的點轉譯為相對於其容器來源的點。
COleControl::ClipCaretRect 如果控件重疊插入號矩形,則調整插入號矩形。
COleControl::ControlInfoChanged 在控件所處理的助記鍵集變更之後,呼叫此函式。
COleControl::D isplayError 將 [錯誤] 事件顯示給控件的使用者。
COleControl::D oClick 實作 stock DoClick 方法。
COleControl::D oPropExchange 串行化 對象的屬性 COleControl
COleControl::D oSuperclassPaint 重新繪製已從 Windows 控制件子類別化的 OLE 控制件。
COleControl::EnableSimpleFrame 啟用控件的簡單畫面支援。
COleControl::ExchangeExtent 串行化控件的寬度和高度。
COleControl::ExchangeStockProps 串行化控件的庫存屬性。
COleControl::ExchangeVersion 串行化控件的版本號碼。
COleControl::FireClick 引發股票 Click 事件。
COleControl::FireDblClick 引發股票 DblClick 事件。
COleControl::FireError 引發股票 Error 事件。
COleControl::FireEvent 引發自定義事件。
COleControl::FireKeyDown 引發股票 KeyDown 事件。
COleControl::FireKeyPress 引發股票 KeyPress 事件。
COleControl::FireKeyUp 引發股票 KeyUp 事件。
COleControl::FireMouseDown 引發股票 MouseDown 事件。
COleControl::FireMouseMove 引發股票 MouseMove 事件。
COleControl::FireMouseUp 引發股票 MouseUp 事件。
COleControl::FireReadyStateChange 引發控件就緒狀態變更時的事件。
COleControl::GetActivationPolicy 改變支援 IPointerInactive 介面之控件的預設啟用行為。
COleControl::GetAmbientProperty 傳回指定環境屬性的值。
COleControl::GetAppearance 傳回股票外觀屬性的值。
COleControl::GetBackColor 傳回 stock BackColor 屬性的值。
COleControl::GetBorderStyle 傳回 stock BorderStyle 屬性的值。
COleControl::GetCapture 判斷無窗口、啟動的控件物件是否具有滑鼠擷取。
COleControl::GetClassID 擷取控件的 OLE 類別標識碼。
COleControl::GetClientOffset 擷取控件矩形區域左上角與其工作區左上角之間的差異。
COleControl::GetClientRect 擷取控件工作區的大小。
COleControl::GetClientSite 查詢物件,以取得其容器內目前用戶端月臺的指標。
COleControl::GetControlFlags 擷取控件旗標設定。
COleControl::GetControlSize 傳回 OLE 控制件的位置和大小。
COleControl::GetDC 提供無視窗控制件從其容器取得裝置內容的方法。
COleControl::GetEnabled 傳回 stock Enabled 屬性的值。
COleControl::GetExtendedControl 擷取屬於容器之擴充控件物件的指標。
COleControl::GetFocus 判斷控件是否具有焦點。
COleControl::GetFont 傳回 stock Font 屬性的值。
COleControl::GetFontTextMetrics 傳回 物件的計量 CFontHolder
COleControl::GetForeColor 傳回 stock ForeColor 屬性的值。
COleControl::GetHwnd 傳回 stock hWnd 屬性的值。
COleControl::GetMessageString 提供功能表項的狀態列文字。
COleControl::GetNotSupported 防止使用者存取控件的屬性值。
COleControl::GetReadyState 傳回控件的整備狀態。
COleControl::GetRectInContainer 傳回控件相對於其容器的矩形。
COleControl::GetStockTextMetrics 傳回 stock Font 屬性的計量。
COleControl::GetText 傳回 stock Text 或 Caption 屬性的值。
COleControl::GetWindowlessDropTarget 覆寫可讓無視窗控件成為拖放作業的目標。
COleControl::InitializeIIDs 通知控件將使用之 IID 的基類。
COleControl::InternalGetFont CFontHolder 回 stock Font 屬性的 物件。
COleControl::InternalGetText 擷取 stock Caption 或 Text 屬性。
COleControl::InternalSetReadyState 設定控件的整備狀態,並引發就緒狀態變更事件。
COleControl::InvalidateControl 使顯示控件的區域失效,使其重新繪製。
COleControl::InvalidateRgn 使容器視窗在指定區域內的工作區失效。 可用來重新繪製區域中的無視窗控制件。
COleControl::IsConvertingVBX 允許特製化載入 OLE 控制件。
COleControl::IsModified 判斷控件狀態是否已變更。
COleControl::IsOptimizedDraw 指出容器是否支援目前繪圖作業的優化繪圖。
COleControl::IsSubclassedControl 呼叫 以判斷控件子類別是否為 Windows 控制件。
COleControl::Load 重設任何先前的異步數據,並起始控件異步屬性的新負載。
COleControl::LockInPlaceActive 判斷您的控制件是否可以由容器停用。
COleControl::OnAmbientPropertyChange 當環境屬性變更時呼叫。
COleControl::OnAppearanceChanged 變更庫存外觀屬性時呼叫。
COleControl::OnBackColorChanged 變更 stock BackColor 屬性時呼叫。
COleControl::OnBorderStyleChanged 變更 Stock BorderStyle 屬性時呼叫。
COleControl::OnClick 呼叫 以引發股票 Click 事件。
COleControl::OnClose 通知已呼叫的控件 IOleControl::Close
COleControl::OnDoVerb 在執行控件動詞之後呼叫。
COleControl::OnDraw 當要求重新繪製控件時呼叫。
COleControl::OnDrawMetafile 當要求控制項使用元文件裝置內容重新繪製本身時,由容器呼叫。
COleControl::OnEdit 由容器呼叫UI啟動OLE控制件。
COleControl::OnEnabledChanged 變更庫存 Enabled 屬性時呼叫。
COleControl::OnEnumVerbs 由容器呼叫以列舉控件的動詞。
COleControl::OnEventAdvise 當事件處理程式與控件連接或中斷連線時呼叫。
COleControl::OnFontChanged 變更庫存字型屬性時呼叫。
COleControl::OnForeColorChanged 變更 stock ForeColor 屬性時呼叫。
COleControl::OnFreezeEvents 當控件的事件凍結或解除凍結時呼叫。
COleControl::OnGetColorSet 通知已呼叫的控件 IOleObject::GetColorSet
COleControl::OnGetControlInfo 提供容器的助記鍵資訊。
COleControl::OnGetDisplayString 呼叫 以取得表示屬性值的字串。
COleControl::OnGetInPlaceMenu 要求將與容器功能表合併之控件功能表的句柄。
COleControl::OnGetNaturalExtent 覆寫 以擷取最接近建議大小和 ex 帳篷模式 的控件顯示大小。
COleControl::OnGetPredefinedStrings 傳回字串,表示屬性的可能值。
COleControl::OnGetPredefinedValue 傳回對應至預先定義字串的值。
COleControl::OnGetViewExtent 覆寫 以擷取控件顯示區域的大小(可用來啟用雙傳遞繪圖)。
COleControl::OnGetViewRect 覆寫 以將控件的大小轉換成從特定位置開始的矩形。
COleControl::OnGetViewStatus 覆寫 以擷取控件的檢視狀態。
COleControl::OnHideToolBars 當控件停用UI時,由容器呼叫。
COleControl::OnInactiveMouseMove 覆寫 ,讓滑鼠指標下非使用中控件的容器分派WM_MOUSEMOVE訊息至 控件。
COleControl::OnInactiveSetCursor 覆寫 ,讓滑鼠指標下非使用中控件的容器分派WM_SETCURSOR訊息至控件。
COleControl::OnKeyDownEvent 在已引發股票 KeyDown 事件之後呼叫。
COleControl::OnKeyPressEvent 在已引發股票 KeyPress 事件之後呼叫。
COleControl::OnKeyUpEvent 在已引發庫存 KeyUp 事件之後呼叫。
COleControl::OnMapPropertyToPage 指出要用於編輯屬性的屬性頁。
COleControl::OnMnemonic 按下控件的助記鍵時呼叫。
COleControl::OnProperties 叫用控件的 「屬性」動詞時呼叫。
COleControl::OnQueryHitPoint 覆寫以查詢控件的顯示是否與指定點重疊。
COleControl::OnQueryHitRect 覆寫 以查詢控件的顯示是否與指定矩形中的任何點重疊。
COleControl::OnRenderData 由架構呼叫,以擷取指定格式的數據。
COleControl::OnRenderFileData 由架構呼叫,以從指定格式的檔案擷取數據。
COleControl::OnRenderGlobalData 由架構呼叫,以指定格式從全域記憶體擷取數據。
COleControl::OnResetState 將控件的屬性重設為預設值。
COleControl::OnSetClientSite 通知已呼叫的控件 IOleControl::SetClientSite
COleControl::OnSetData 以另一個值取代控制件的數據。
COleControl::OnSetExtent 在控件的範圍變更之後呼叫。
COleControl::OnSetObjectRects 在控件的維度變更之後呼叫。
COleControl::OnShowToolBars 當控件已啟動UI時呼叫。
COleControl::OnTextChanged 變更庫存文字或 Caption 屬性時呼叫。
COleControl::OnWindowlessMessage 處理無視窗控制件的視窗訊息(非滑鼠和鍵盤訊息)。
COleControl::P arentToClient 將相對於容器來源的點轉譯為相對於控件來源的點。
COleControl::P ostModalDialog 通知容器已關閉強制回應對話框。
COleControl::P reModalDialog 通知容器即將顯示強制回應對話框。
COleControl::RecreateControlWindow 終結並重新建立控件的視窗。
COleControl::Refresh 強制重新繪出控件的外觀。
COleControl::ReleaseCapture 釋放滑鼠擷取。
COleControl::ReleaseDC 釋放無視窗控制件容器的顯示裝置內容。
COleControl::ReparentControlWindow 重設控件視窗的父代。
COleControl::ResetStockProps COleControl將庫存屬性初始化為其預設值。
COleControl::ResetVersion 將版本號碼初始化為指定的值。
COleControl::ScrollWindow 允許無視窗控制件在顯示器上捲動其就地使用中影像內的區域。
COleControl::SelectFontObject 將自訂 Font 屬性選取至裝置內容。
COleControl::SelectStockFont 將 [字型] 屬性選取為裝置內容。
COleControl::SerializeExtent 串行化或初始化 控件的顯示空間。
COleControl::SerializeStockProps 串行化或初始化 COleControl 庫存屬性。
COleControl::SerializeVersion 串行化或初始化控件的版本資訊。
COleControl::SetAppearance 設定 Stock Appearance 屬性的值。
COleControl::SetBackColor 設定 stock BackColor 屬性的值。
COleControl::SetBorderStyle 設定 stock BorderStyle 屬性的值。
COleControl::SetCapture 讓控件的容器視窗代表控件擁有滑鼠擷取。
COleControl::SetControlSize 設定 OLE 控制件的位置和大小。
COleControl::SetEnabled 設定 stock Enabled 屬性的值。
COleControl::SetFocus 讓控件的容器視窗代表控件擁有輸入焦點。
COleControl::SetFont 設定 stock Font 屬性的值。
COleControl::SetForeColor 設定 stock ForeColor 屬性的值。
COleControl::SetInitialSize 設定第一次顯示在容器中的 OLE 控制件大小。
COleControl::SetModifiedFlag 變更控件的修改狀態。
COleControl::SetNotPermitted 表示編輯要求失敗。
COleControl::SetNotSupported 防止使用者修改控件的屬性值。
COleControl::SetRectInContainer 設定控件相對於其容器的矩形。
COleControl::SetText 設定 stock Text 或 Caption 屬性的值。
COleControl::ThrowError 表示 OLE 控制件中發生錯誤。
COleControl::TransformCoords 轉換容器與控件之間的座標值。
COleControl::TranslateColor 將OLE_COLOR值轉換為 COLORREF 值。
COleControl::WillAmbientsBeValidDuringLoad 判斷下次載入控件時,環境屬性是否可供使用。
COleControl::WindowProc 提供物件的 COleControl Windows 程式。

受保護的方法

名稱 描述
COleControl::D rawContent 需要更新控件的外觀時,由架構呼叫。
COleControl::D rawMetafile 使用元檔裝置內容時,由架構呼叫。
COleControl::IsInvokeAllowed 啟用自動化方法調用。
COleControl::SetInitialDataFormats 由架構呼叫,以初始化 控件所支持的數據格式清單。

備註

衍生自 CWnd,這個類別會繼承 Windows 視窗物件的所有功能,以及 OLE 特有的其他功能,例如事件引發,以及支援方法和屬性的能力。

OLE 控制件可以插入 OLE 容器應用程式中,並使用事件引發的雙向系統與容器通訊,並將方法和屬性公開給容器。 請注意,標準 OLE 容器只支援 OLE 控制項的基本功能。 它們無法支援 OLE 控制件的擴充功能。 當事件因為控件中發生的特定動作而傳送至容器時,就會發生事件引發。 接著,容器會使用一組公開的方法和屬性,與C++類別的成員函式和數據成員類似,來與控件通訊。 此方法可讓開發人員控制控件的外觀,並在發生特定動作時通知容器。

無視窗控制項

OLE 控件可以在沒有窗口的情況下就地使用。 無視窗控制元件具有顯著的優點:

  • 無視窗控制件可以是透明和非矩形

  • 無視窗控制項可減少物件的實例大小和建立時間

控制件不需要視窗。 視窗所提供的服務可透過單一共享視窗(通常是容器的)和一些分派程式代碼輕鬆提供。 擁有視窗主要是物件上不必要的複雜問題。

使用無窗口啟用時,容器(具有窗口)負責提供服務,否則由控件自己的視窗提供。 例如,如果您的控件需要查詢鍵盤焦點、查詢滑鼠擷取或取得裝置內容,這些作業會由容器管理。 COleControl無視窗作業成員函式會在容器上叫用這些作業。

啟用無窗口啟用時,容器會將輸入訊息委派給控件的IOleInPlaceObjectWindowless介面(無窗口支援的 IOleInPlaceObject 延伸模組)。 COleControl此介面的實作會在適當地調整滑鼠座標之後,透過控件的訊息對應分派這些訊息。 您可以將對應的專案新增至訊息對應,以像一般視窗訊息一樣處理這些訊息。

在無視窗控制件中 COleControl ,您應該一律使用成員函式,而不是對應的 CWnd 成員函式或其相關的 Windows API 函式。

OLE 控件物件只能在作用中時建立視窗,但非作用中轉換所需的工作量會上升,而轉換的速度會降低。 在某些情況下,這是個問題:例如,請考慮文本框的網格線。 在數據行上下游標時,每個控件都必須就地啟動,然後停用。 非使用中/主動轉換的速度將直接影響捲動速度。

如需開發 OLE 控制項架構的詳細資訊,請參閱 MFC ActiveX 控制件和概觀:建立 MFC ActiveX 控制項程式一文 如需優化 OLE 控制件的資訊,包括無視窗和無閃爍控件,請參閱 MFC ActiveX 控制件:優化

繼承階層架構

CObject

CCmdTarget

CWnd

COleControl

需求

標頭: afxctl.h

COleControl::AmbientBackColor

傳回環境 BackColor 屬性的值。

OLE_COLOR AmbientBackColor();

傳回值

容器環境 BackColor 屬性的目前值,如果有的話。 如果不支援 屬性,此函式會傳回系統定義的 Windows 背景色彩。

備註

環境BackColor屬性可供所有控制項使用,並由容器定義。 請注意,不需要容器才能支援這個屬性。

COleControl::AmbientDisplayName

容器指派給控件的名稱可用於向用戶顯示的錯誤訊息。

CString AmbientDisplayName();

傳回值

OLE 控制件的名稱。 預設值為零長度字串。

備註

請注意,不需要容器才能支援這個屬性。

COleControl::AmbientFont

傳回環境 Font 屬性的值。

LPFONTDISP AmbientFont();

傳回值

容器環境字型分派介面的指標。 預設值是 NULL。 如果傳回不等於 NULL,您必須負責藉由呼叫其 IUnknown::Release 成員函式來釋放字型。

備註

環境 Font 屬性是由容器定義,可供所有控制件使用。請注意,不需要容器才能支援這個屬性。

COleControl::AmbientForeColor

傳回環境 ForeColor 屬性的值。

OLE_COLOR AmbientForeColor();

傳回值

容器環境 ForeColor 屬性的目前值,如果有的話。 如果不支援,此函式會傳回系統定義的 Windows 文字色彩。

備註

環境 ForeColor 屬性可供所有控制項使用,並由容器定義。 請注意,不需要容器才能支援這個屬性。

COleControl::AmbientLocaleID

傳回容器的地區設定標識碼。

LCID AmbientLocaleID();

傳回值

容器LocaleID屬性的值,如果有的話。 如果不支援這個屬性,則此函式會傳回 0。

備註

控制件可以使用 LocaleID 來調整其特定地區設定的使用者介面。 請注意,不需要容器才能支援這個屬性。

COleControl::AmbientAppearance

擷取控件物件的目前外觀設定。

short AmbientAppearance();

傳回值

控制元件的外觀:

  • 0 一般外觀

  • 1 3D 外觀

備註

呼叫此函式,以擷取控件DISPID_AMBIENT_APPEARANCE屬性的目前值。

COleControl::AmbientScaleUnits

傳回容器所使用的單位類型。

CString AmbientScaleUnits();

傳回值

字串,包含容器的環境 ScaleUnits。 如果不支援此屬性,則此函式會傳回長度為零的字串。

備註

容器的環境 ScaleUnits 屬性可用來顯示以所選單位加上標籤的位置或維度,例如 twip 或公分。 請注意,不需要容器才能支援這個屬性。

COleControl::AmbientShowGrabHandles

判斷容器是否允許控件在作用中時顯示本身的抓取控點。

BOOL AmbientShowGrabHandles();

傳回值

如果應該顯示抓取控點,則為非零;否則為 0。 如果不支援此屬性,則此函式會傳回非零。

備註

請注意,不需要容器才能支援這個屬性。

COleControl::AmbientShowHatching

判斷容器是否允許控件在UI使用時以影線模式顯示本身。

BOOL AmbientShowHatching();

傳回值

如果應該顯示已孵化的圖樣,則為非零;否則為 0。 如果不支援此屬性,則此函式會傳回非零。

備註

請注意,不需要容器才能支援這個屬性。

COleControl::AmbientTextAlign

決定控件容器慣用的環境文字對齊方式。

short AmbientTextAlign();

傳回值

容器環境 TextAlign 屬性的狀態。 如果不支援這個屬性,則此函式會傳回 0。

以下是有效的傳回值清單:

傳回值 意義
0 一般對齊方式(右邊的數位,左邊的文字)。
1 左對齊
2 置中
3 正確對齊

備註

這個屬性可供所有內嵌控件使用,並由容器定義。 請注意,不需要容器才能支援這個屬性。

COleControl::AmbientUIDead

判斷容器是否希望控件回應使用者介面動作。

BOOL AmbientUIDead();

傳回值

如果控件應該回應使用者介面動作,則為非零;否則為 0。 如果不支援這個屬性,則此函式會傳回 0。

備註

例如,容器可能會在設計模式中將此設定為TRUE。

COleControl::AmbientUserMode

判斷容器是否處於設計模式或使用者模式。

BOOL AmbientUserMode();

傳回值

如果容器處於使用者模式,則為非零;否則為 0 (在設計模式中)。 如果不支援此屬性,此函式會傳回 TRUE。

備註

例如,容器可能會在設計模式中將此設定為 FALSE。

COleControl::BoundPropertyChanged

表示系結屬性值已變更。

void BoundPropertyChanged(DISPID dispid);

參數

dispid
控件系結屬性的分派標識碼。

備註

每當屬性的值變更時,都必須呼叫這個值,即使在未透過屬性 Set 方法進行變更的情況下也一定會呼叫。 特別留意對應至成員變數的系結屬性。 每當這類成員變數變更時, BoundPropertyChanged 都必須呼叫。

COleControl::BoundPropertyRequestEdit

要求 IPropertyNotifySink 介面的許可權,以變更 控件所提供的系結屬性值。

BOOL BoundPropertyRequestEdit(DISPID dispid);

參數

dispid
控件系結屬性的分派標識碼。

傳回值

如果允許變更,則為非零;否則為 0。 預設值為非零值。

備註

如果許可權遭到拒絕,控件不得讓 屬性的值變更。 您可以忽略或失敗嘗試變更屬性值的動作來完成。

COleControl::ClientToParent

將 pPoint座標轉譯為父座標。

virtual void ClientToParent(
    LPCRECT lprcBounds,
    LPPOINT pPoint) const;

參數

lprcBounds
容器內 OLE 控制件界限的指標。 不是工作區,而是整個控件的區域,包括框線和滾動條。

pPoint
要轉譯為父系 (container) 座標之 OLE 工作區點的指標。

備註

在輸入 pPoint 上,相對於 OLE 控制項工作區的原點(控件工作區左上角)。 在輸出 pPoint 上,相對於父系的原點(容器左上角)。

COleControl::ClipCaretRect

如果插入號矩形完全或部分由重疊、不透明的對象所覆蓋,則調整插入號矩形。

BOOL ClipCaretRect(LPRECT lpRect);

參數

lpRect
在輸入時,RECT 結構的指標,其中包含要調整的插入號區域。 在輸出上,調整的插入號區域,如果插入號矩形已完全涵蓋,則為 NULL。

傳回值

如果成功則為非零;否則為 0。

備註

插入號是閃爍的線條、區塊或點陣圖,通常表示要插入文字或圖形的位置。

無視窗對象無法安全地顯示插入號,而不需要先檢查插入號是否部分或完全由重疊的物件隱藏。 為了使這一點成為可能,物件可以使用 ClipCaretRect 來取得調整的插入號(已縮減),以確保它符合裁剪區域。

建立插入號的對象應該將插入號矩形提交至 ClipCaretRect ,並使用插入號調整后的矩形。 如果插入號完全隱藏,這個方法會傳回 FALSE,在此情況下完全不應該顯示插入號。

COleControl::COleControl

建構 COleControl 物件。

COleControl();

備註

此函式通常不會直接呼叫。 相反地,OLE 控件通常是由其類別處理站所建立。

COleControl::ControlInfoChanged

當控件支援的助記鍵集已變更時,請呼叫此函式。

void ControlInfoChanged();

備註

收到此通知后,控件的容器會呼叫 IOleControl::GetControlInfo 來取得新的助記鍵集。 請注意,不需要容器才能回應此通知。

COleControl::D isplayError

在處理庫存錯誤事件之後由架構呼叫(除非事件處理程序隱藏錯誤顯示)。

virtual void DisplayError(
    SCODE scode,
    LPCTSTR lpszDescription,
    LPCTSTR lpszSource,
    LPCTSTR lpszHelpFile,
    UINT nHelpID);

參數

scode
要報告的狀態代碼值。 如需可能程序代碼的完整清單,請參閱 ActiveX 控件:進階主題一

lpszDescription
所報告錯誤的描述。

lpszSource
產生錯誤的模組名稱(通常是 OLE 控制模組的名稱)。

lpszHelpFile
包含錯誤描述的說明檔名稱。

nHelpID
所回報錯誤的說明內容識別碼。

備註

默認行為會顯示消息框,其中包含 lpszDescription 中包含的錯誤描述。

覆寫此函式以自定義錯誤顯示方式。

COleControl::D oClick

模擬控件上的滑鼠按一下動作。

void DoClick();

備註

如果控件支援,則會呼叫可 COleControl::OnClick 覆寫的成員函式,並引發 Stock Click 事件。

基類支援 COleControl 此函式做為 stock 方法,稱為 DoClick。 如需詳細資訊,請參閱 ActiveX 控制件:方法一文

COleControl::D oPropExchange

從持續性記憶體表示法載入或儲存控制項時,由架構呼叫,例如數據流或屬性集。

virtual void DoPropExchange(CPropExchange* pPX);

參數

pPX
CPropExchange 物件的指標。 架構會提供這個物件來建立屬換的內容,包括其方向。

備註

此函式通常會呼叫 PX_ 系列函式,以載入或儲存 OLE 控件的特定使用者定義屬性。

如果 [控件精靈] 已用來建立 OLE 控制項專案,則覆寫的此函式版本會使用對基類函式的呼叫,串行化所COleControl支援的庫存屬性。 COleControl::DoPropExchange 當您將使用者定義的屬性新增至 OLE 控制項時,您必須修改此函式來串行化新的屬性。 如需串行化的詳細資訊,請參閱 ActiveX 控件:串行化一文

COleControl::D oSuperclassPaint

重新繪製已從 Windows 控制件子類別化的 OLE 控制件。

void DoSuperclassPaint(
    CDC* pDC,
    const CRect& rcBounds);

參數

pDC
控件容器之裝置內容的指標。

rcBounds
要繪製控件的區域。

備註

呼叫此函式以正確處理非作用中 OLE 控制件的繪製。 只有當 OLE 控制項子類別化 Windows 控制件,而且應該在控件的函式中 OnDraw 呼叫時,才應該使用此函式。

如需此函式和子類別化 Windows 控件的詳細資訊,請參閱 ActiveX 控件:子類別化 Windows 控制件一文

COleControl::D rawContent

需要更新控件的外觀時,由架構呼叫。

void DrawContent(
    CDC* pDC,
    CRect& rc);

參數

pDC
裝置內容的指標。

鋼筋混凝土
要繪製的矩形區域。

備註

此函式會直接呼叫可 OnDraw 覆寫的函式。

COleControl::D rawMetafile

使用元檔裝置內容時,由架構呼叫。

void DrawMetafile(
    CDC* pDC,
    CRect& rc);

參數

pDC
元檔裝置內容的指標。

鋼筋混凝土
要繪製的矩形區域。

COleControl::EnableSimpleFrame

啟用 OLE 控制件的簡單框架特性。

void EnableSimpleFrame();

備註

這個特性可讓控件支援其他控件的視覺內含專案,但不能支援真正的 OLE 內含專案。 例如,內含數個控件的群組方塊。 這些控件未包含 OLE,但位於相同的群組方塊中。

COleControl::ExchangeExtent

串行化或初始化控件範圍的狀態(其維度為 HIMETRIC 單位)。

BOOL ExchangeExtent(CPropExchange* pPX);

參數

pPX
CPropExchange 物件的指標。 架構會提供這個物件來建立屬換的內容,包括其方向。

傳回值

如果函式成功,則為非零;否則為 0。

備註

此函式通常由的預設實作 COleControl::DoPropExchange呼叫。

COleControl::ExchangeStockProps

串行化或初始化控件的股票屬性狀態。

void ExchangeStockProps(CPropExchange* pPX);

參數

pPX
CPropExchange 物件的指標。 架構會提供這個物件來建立屬換的內容,包括其方向。

備註

此函式通常由的預設實作 COleControl::DoPropExchange呼叫。

COleControl::ExchangeVersion

串行化或初始化控件版本信息的狀態。

BOOL ExchangeVersion(
    CPropExchange* pPX,
    DWORD dwVersionDefault,
    BOOL bConvert = TRUE);

參數

pPX
CPropExchange 物件的指標。 架構會提供這個物件來建立屬換的內容,包括其方向。

dwVersionDefault
控制件的目前版本號碼。

bConvert
指出在儲存時,持續性數據是否應該轉換成最新的格式,或以已載入的相同格式進行維護。

傳回值

函式的非零成功;否則為 0。

備註

一般而言,這會是控件覆寫 COleControl::DoPropExchange所呼叫的第一個函式。 載入時,此函式會讀取永續性數據的版本號碼,並據以設定 CPropExchange 物件的 version 屬性。 儲存時,此函式會寫入永續性數據的版本號碼。

如需持續性和版本控制的詳細資訊,請參閱 ActiveX 控件:串行化一文

COleControl::FireClick

當滑鼠按兩下使用中控制件時,由架構呼叫。

void FireClick();

備註

如果此事件定義為自定義事件,您可以判斷事件何時引發。

若要自動引發 Click 事件,控件的事件對應必須已定義 Stock Click 事件。

COleControl::FireDblClick

當滑鼠按兩下使用中控制件時,由架構呼叫。

void FireDblClick();

備註

如果此事件定義為自定義事件,您可以判斷事件何時引發。

若要自動引發 DblClick 事件,控件的事件對應必須已定義 stock DblClick 事件。

COleControl::FireError

引發庫存錯誤事件。

void FireError(
    SCODE scode,
    LPCTSTR lpszDescription,
    UINT nHelpID = 0);

參數

scode
要報告的狀態代碼值。 如需可能程序代碼的完整清單,請參閱 ActiveX 控件:進階主題一

lpszDescription
所報告錯誤的描述。

nHelpID
所回報錯誤的 [說明標識符]。

備註

此事件可讓您在程式代碼的適當位置發出訊號,指出控件內發生錯誤。 不同於其他庫存事件,例如 Click 或 MouseMove,架構永遠不會引發 Error。

若要報告在屬性 get 函式、屬性集函式或自動化方法期間發生的錯誤,請呼叫 COleControl::ThrowError

OLE 控制件的 Stock Error 事件的實作會使用 SCODE 值。 如果您的控件使用此事件,而且打算在 Visual Basic 4.0 中使用,您將會收到錯誤,因為 Visual Basic 中不支援 SCODE 值。

若要修正此問題,請手動變更 控件 中的 SCODE 參數。ODL 檔案至 long。 此外,任何使用 SCODE 參數的自定義事件、方法或屬性也會造成相同的問題。

COleControl::FireEvent

使用任意數目的選擇性自變數,從控件引發使用者定義的事件。

void AFX_CDECL FireEvent(
    DISPID dispid,
    BYTE* pbParams,
...);

參數

dispid
要引發之事件的分派標識碼。

pbParams
事件參數類型的描述項。

備註

通常不應該直接呼叫此函式。 相反地,您會在控件類別宣告的事件對應區段中呼叫事件引發函式。

pbParams 自變數是以空格分隔的VTS_清單。 其中的一或多個值 (以空格分隔,而非逗號) 會指定函式的參數清單。 可能值如下所示:

符號 參數類型
VTS_COLOR OLE_COLOR
VTS_FONT IFontDisp*
VTS_HANDLE HWND
VTS_PICTURE IPictureDisp*
VTS_OPTEXCLUSIVE OLE_OPTEXCLUSIVE*
VTS_TRISTATE OLE_TRISTATE
VTS_XPOS_HIMETRIC OLE_XPOS_HIMETRIC
VTS_YPOS_HIMETRIC OLE_YPOS_HIMETRIC
VTS_XPOS_PIXELS OLE_XPOS_PIXELS
VTS_YPOS_PIXELS OLE_YPOS_PIXELS
VTS_XSIZE_PIXELS OLE_XSIZE_PIXELS
VTS_YSIZE_PIXELS OLE_XSIZE_PIXELS
VTS_XSIZE_HIMETRIC OLE_XSIZE_HIMETRIC
VTS_YSIZE_HIMETRIC OLE_XSIZE_HIMETRIC

注意

除了VTS_FONT和VTS_PICTURE之外,已針對所有變體類型定義其他變數常數,以提供變數數據常數的指標。 這些常數是使用VTS_P<CONSTANT-NAME> 慣例來命名。 例如,VTS_PCOLOR是VTS_COLOR常數的指標。

COleControl::FireKeyDown

當控件為UI使用中時按下按鍵時,由架構呼叫。

void FireKeyDown(
    USHORT* pnChar,
    short nShiftState);

參數

pnChar
所按下按鍵之虛擬按鍵程式代碼值的指標。 如需標準虛擬密鑰碼的清單,請參閱 Winuser.h

nShiftState
包含下列旗標的組合:

  • SHIFT_MASK動作期間按下 SHIFT 鍵。

  • CTRL_MASK動作期間按下 CTRL 鍵。

  • ALT_MASK動作期間按下 ALT 鍵。

備註

如果此事件定義為自定義事件,您可以判斷事件何時引發。

若要自動引發 KeyDown 事件,控件的事件對應必須已定義庫存 KeyDown 事件。

COleControl::FireKeyPress

當自定義控件在容器中為UI作用中時按下並放開按鍵時,由架構呼叫。

void FireKeyPress(USHORT* pnChar);

參數

pnChar
按下按鍵之字元值的指標。

備註

如果此事件定義為自定義事件,您可以判斷事件何時引發。

事件的收件者可能會修改 pnChar,例如,將所有小寫字元轉換成大寫。 如果您要檢查修改過的字元,請覆寫 OnKeyPressEvent

若要自動引發 KeyPress 事件,控件的事件對應必須已定義庫存 KeyPress 事件。

COleControl::FireKeyUp

當自定義控件在容器中為UI作用中時釋放索引鍵時,由架構呼叫。

void FireKeyUp(
    USHORT* pnChar,
    short nShiftState);

參數

pnChar
已發行金鑰之虛擬金鑰程式代碼值的指標。 如需標準虛擬密鑰碼的清單,請參閱 Winuser.h

nShiftState
包含下列旗標的組合:

  • SHIFT_MASK動作期間按下 SHIFT 鍵。

  • CTRL_MASK動作期間按下 CTRL 鍵。

  • ALT_MASK動作期間按下 ALT 鍵。

備註

如果此事件定義為自定義事件,您可以判斷事件何時引發。

若要自動引發 KeyUp 事件,控件的事件對應必須已定義庫存 KeyUp 事件。

COleControl::FireMouseDown

當滑鼠按鈕按下使用中自定義控制項時,由架構呼叫。

void FireMouseDown(
    short nButton,
    short nShiftState,
    OLE_XPOS_PIXELS x,
    OLE_YPOS_PIXELS y);

參數

nButton
按下滑鼠按鈕的數值。 它可以包含下列其中一個值:

  • LEFT_BUTTON按下滑鼠左鍵。

  • MIDDLE_BUTTON按下滑鼠中鍵。

  • RIGHT_BUTTON滑鼠右鍵已按下。

nShiftState
包含下列旗標的組合:

  • SHIFT_MASK動作期間按下 SHIFT 鍵。

  • CTRL_MASK動作期間按下 CTRL 鍵。

  • ALT_MASK動作期間按下 ALT 鍵。

x
按下滑鼠按鈕時光標的 X 座標。 座標相對於控件視窗的左上角。

y
按下滑鼠按鈕時光標的 Y 座標。 座標相對於控件視窗的左上角。

備註

如果此事件定義為自定義事件,您可以判斷事件何時引發。

若要自動引發 MouseDown 事件,控件的事件對應必須已定義 Stock MouseDown 事件。

COleControl::FireMouseMove

當游標移至使用中的自定義控件時,由架構呼叫。

void FireMouseMove(
    short nButton,
    short nShiftState,
    OLE_XPOS_PIXELS x,
    OLE_YPOS_PIXELS y);

參數

nButton
按下滑鼠按鈕的數值。 包含下列值的組合:

  • LEFT_BUTTON動作期間按下滑鼠左鍵。

  • MIDDLE_BUTTON動作期間按下滑鼠中間按鈕。

  • RIGHT_BUTTON動作期間按下滑鼠右鍵。

nShiftState
包含下列旗標的組合:

  • SHIFT_MASK動作期間按下 SHIFT 鍵。

  • CTRL_MASK動作期間按下 CTRL 鍵。

  • ALT_MASK動作期間按下 ALT 鍵。

x
數據指標的 X 座標。 座標相對於控件視窗的左上角。

y
游標的 Y 座標。 座標相對於控件視窗的左上角。

備註

如果此事件定義為自定義事件,您可以判斷事件何時引發。

若要自動引發 MouseMove 事件,控件的事件對應必須已定義 Stock MouseMove 事件。

COleControl::FireMouseUp

當滑鼠按鈕在作用中的自定義控件上放開時,由架構呼叫。

void FireMouseUp(
    short nButton,
    short nShiftState,
    OLE_XPOS_PIXELS x,
    OLE_YPOS_PIXELS y);

參數

nButton
放開滑鼠按鈕的數值。 它可以有下列其中一個值:

  • LEFT_BUTTON放開滑鼠左鍵。

  • MIDDLE_BUTTON放開滑鼠中鍵。

  • RIGHT_BUTTON放開滑鼠右鍵。

nShiftState
包含下列旗標的組合:

  • SHIFT_MASK動作期間按下 SHIFT 鍵。

  • CTRL_MASK動作期間按下 CTRL 鍵。

  • ALT_MASK動作期間按下 ALT 鍵。

x
放開滑鼠按鈕時光標的 X 座標。 座標相對於控件視窗的左上角。

y
放開滑鼠按鈕時光標的 Y 座標。 座標相對於控件視窗的左上角。

備註

如果此事件定義為自定義事件,您可以判斷事件何時引發。

若要自動引發 MouseUp 事件,控件的事件對應必須已定義 Stock MouseUp 事件。

COleControl::FireReadyStateChange

使用目前就緒控件狀態的值引發事件。

void FireReadyStateChange();

備註

就緒狀態可以是下列其中一個值:

名稱 描述
READYSTATE_UNINITIALIZED 預設初始化狀態
READYSTATE_LOADING 控制件目前正在載入其屬性
READYSTATE_LOADED 控件已初始化
READYSTATE_INTERACTIVE 控件有足夠的數據可供互動,但尚未載入所有異步數據
READYSTATE_COMPLETE 控制件具有其所有數據

使用 GetReadyState 來判斷控制件目前的整備程度。

InternalSetReadyState 會將就緒狀態變更為所提供的值,然後呼叫 FireReadyStateChange

COleControl::GetActivationPolicy

改變支援 IPointerInactive 介面之控件的預設啟用行為。

virtual DWORD GetActivationPolicy();

傳回值

POINTERINACTIVE 列舉中的旗標組合。 可能的旗標為:

名稱 描述
POINTERINACTIVE_ACTIVATEONENTRY 當滑鼠在滑鼠移動作業期間輸入物件時,應該就地啟動物件。
POINTERINACTIVE_DEACTIVATEONLEAVE 當滑鼠在滑鼠移動作業期間離開物件時,應該停用物件。
POINTERINACTIVE_ACTIVATEONDRAG 當滑鼠在拖放作業期間將滑鼠拖曳到該物件上時,應該就地啟動物件。

備註

IPointerInactive啟用介面時,容器會委派WM_SETCURSOR,並將訊息WM_MOUSEMOVE給它。 COleControl此介面的實作會在適當地調整滑鼠座標之後,透過控件的訊息對應分派這些訊息。

每當容器收到WM_SETCURSOR或WM_MOUSEMOVE訊息,並將滑鼠指標放在支援 IPointerInactive的非使用中物件上時,它應該在 介面上呼叫 GetActivationPolicy ,並從 POINTERINACTIVE 列舉傳回旗標。

您可以將對應的專案新增至訊息對應,以像一般視窗訊息一樣處理這些訊息。 在您的處理程式中,避免使用 m_hWnd 成員變數(或任何使用它的成員函式),而不先檢查其值是否為非 NULL。

任何想要執行超過設定滑鼠游標和/或引發滑鼠移動事件的物件,例如提供特殊的視覺回饋,都應該傳回POINTERINACTIVE_ACTIVATEONENTRY旗標,並只在作用中時繪製意見反應。 如果物件傳回此旗標,容器應該立即啟動它,然後將觸發呼叫 的相同訊息轉送至 GetActivationPolicy

如果傳回POINTERINACTIVE_ACTIVATEONENTRY和POINTERINACTIVE_DEACTIVATEONLEAVE旗標,則只有在滑鼠停留物件時,才會啟動物件。 如果只傳回POINTERINACTIVE_ACTIVATEONENTRY旗標,則只有在滑鼠第一次進入物件時,才會啟動物件一次。

您也可以讓非作用中的控件成為 OLE 拖放作業的目標。 這需要在使用者將物件拖曳到控件上方時啟動控件,以便將控件的窗口註冊為置放目標。 若要在拖曳期間發生啟用,請傳回POINTERINACTIVE_ACTIVATEONDRAG旗標:

DWORD CMyAxCtrl::GetActivationPolicy()
{
   return POINTERINACTIVE_ACTIVATEONDRAG;
}

GetActivationPolicy 傳達的資訊不應由容器快取。 相反地,每次滑鼠進入非使用中物件時,都應該呼叫這個方法。

如果非作用中物件在滑鼠輸入時未要求就地啟動,則只要滑鼠指標停留在物件上,其容器應該呼叫 OnInactiveSetCursor,以分派後續WM_SETCURSOR訊息給這個物件

啟用 IPointerInactive 介面通常表示您希望控件能夠隨時處理滑鼠訊息。 若要在不支援 IPointerInactive 介面的容器中取得此行為,您必須在可見時一律啟動您的控件,這表示控件應該在其其他旗標中具有OLEMISC_ACTIVATEWHENVISIBLE旗標。 不過,若要防止此旗標在支援的 IPointerInactive容器中生效,您也可以指定OLEMISC_IGNOREACTIVATEWHENVISIBLE旗標:

static const DWORD BASED_CODE _dwMyOleMisc =
    OLEMISC_ACTIVATEWHENVISIBLE |
    OLEMISC_IGNOREACTIVATEWHENVISIBLE |
    OLEMISC_SETCLIENTSITEFIRST |
    OLEMISC_INSIDEOUT |
    OLEMISC_CANTLINKINSIDE |
    OLEMISC_RECOMPOSEONRESIZE;

COleControl::GetAmbientProperty

取得容器的環境屬性值。

BOOL GetAmbientProperty(
    DISPID dispid,
    VARTYPE vtProp,
    void* pvProp);

參數

dwDispid
所需環境屬性的分派標識碼。

vtProp
Variant 類型標記,指定要在 pvProp傳回之值的型別。

pvProp
將接收屬性值或傳回值之變數位址的指標。 此指標的實際類型必須符合 vtProp指定的類型。

vtProp pvProp 的類型
VT_BOOL BOOL*
VT_BSTR CString*
VT_I2 short*
VT_I4 long*
VT_R4 float*
VT_R8 double*
VT_CY CY*
VT_COLOR OLE_COLOR*
VT_DISPATCH LPDISPATCH*
VT_FONT LPFONTDISP*

傳回值

如果支援環境屬性,則為非零;否則為 0。

備註

如果您使用 GetAmbientProperty 來擷取環境 DisplayName 和 ScaleUnits 屬性,請將 vtProp 設定為 VT_BSTR,並將 pvProp 設定CString*。 如果您要擷取環境 Font 屬性,請將 vtProp 設定為 VT_FONT,並將 pvProp 設定為 LPFONTDISP*。

請注意,已為通用環境屬性提供函式,例如 AmbientBackColorAmbientFont

COleControl::GetAppearance

實作控件股票外觀屬性的 Get 函式。

short GetAppearance ();

傳回值

如果成功,傳回值會將目前的外觀設定指定為 short (VT_I2) 值。 如果控件的外觀是平面的,則此值為零,如果控件的外觀為 3D,則為 1。

COleControl::GetBackColor

實作控件的 Stock BackColor 屬性的 Get 函式。

OLE_COLOR GetBackColor();

傳回值

如果成功,傳回值會將目前的背景色彩指定為OLE_COLOR值。 這個值可以轉譯成具有呼叫 TranslateColor的 COLORREF 值。

COleControl::GetBorderStyle

實作控件的 Stock BorderStyle 屬性的 Get 函式。

short GetBorderStyle();

傳回值

如果控件有一般框線,則為 1;如果控件沒有框線,則為 0。

COleControl::GetCapture

判斷物件是否 COleControl 具有滑鼠擷取。

CWnd* GetCapture();

傳回值

如果控件已啟動且無視窗,則傳回控件目前具有滑鼠擷取(如控件的容器所決定),如果沒有擷取,則傳回 this NULL。

否則,傳 CWnd 回具有滑鼠擷取的物件(與 CWnd::GetCapture相同)。

備註

呼叫 SetCapture,啟動的無視窗控件會收到滑鼠擷取。

COleControl::GetClassID

由架構呼叫以擷取 控件的 OLE 類別標識碼。

virtual HRESULT GetClassID(LPCLSID pclsid) = 0;

參數

pclsid
類別標識碼位置的指標。

傳回值

如果呼叫未成功,則為非零;否則為 0。

備註

通常由 IMPLEMENT_OLECREATE_EX 實作

COleControl::GetClientOffset

擷取控件矩形區域左上角與其工作區左上角之間的差異。

virtual void GetClientOffset(long* pdxOffset, long* pdyOffset) const;

參數

pdxOffset
OLE 控件工作區的水準位移指標。

pdyOffset
OLE 控件工作區垂直位移的指標。

備註

OLE 控件在其容器內有矩形區域。 控件的工作區是控件區域,不包括框線和滾動條。 擷取 GetClientOffset 的位移是控件矩形區域左上角與其工作區左上角之間的差異。 如果您的控件具有標準框線和滾動條以外的非客戶端元素,請覆寫此成員函式以指定位移。

COleControl::GetClientRect

擷取控件工作區的大小。

virtual void GetClientRect(LPRECT lpRect) const;

參數

lpRect
RECT結構的指標,其中包含無視窗控件工作區的維度;也就是說,控件的大小減去視窗框線、框架、滾動條等等。 lpRect 參數會指出控制項用戶端矩形的大小,而不是其位置。

COleControl::GetClientSite

查詢物件,以取得其容器內目前用戶端月臺的指標。

LPOLECLIENTSITE GetClientSite();

傳回值

控件容器中目前用戶端月臺的指標。

備註

傳回的指標指向的 IOleClientSite實例。 IOleClientSite容器所實作的介面是對象的內容檢視:其錨定在檔中的位置,其中會取得其記憶體、使用者介面和其他資源。

COleControl::GetControlFlags

擷取控件旗標設定。

virtual DWORD GetControlFlags();

傳回值

ControlFlags 列舉中旗標的 ORed 組合:

enum ControlFlags {
    fastBeginPaint = 0x0001,
    clipPaintDC = 0x0002,
    pointerInactive = 0x0004,
    noFlickerActivate = 0x0008,
    windowlessActivate = 0x0010,
    canOptimizeDraw = 0x0020,
    };

備註

根據預設, GetControlFlags 會傳 fastBeginPaint | clipPaintDC回 。

名稱 描述
fastBeginPaint 如果設定,請使用針對 OLE 控件量身打造的 begin-paint 函式,而不是 BeginPaint API (預設設定)。
clipPaintDC 如果未設定,請停用 對的COleControl呼叫IntersectClipRect,並取得較小的速度優勢。 如果您使用無窗口啟用,旗標就不會有任何作用。
pointerInactive 如果已設定,請在控件非使用中時提供滑鼠互動,方法是啟用 COleControl的介面實 IPointerInactive 作,預設會停用此介面。
noFlickerActivate 如果設定,則排除額外的繪圖作業和隨附的視覺閃爍。 當您的控制項以非使用中和作用中狀態相同繪製本身時,請使用 。 如果您使用無窗口啟用,旗標就不會有任何作用。
windowlessActivate 如果設定,表示您的控制件使用無視窗啟用。
canOptimizeDraw 如果設定,表示如果容器支援,控件將會執行優化的繪圖。

如需 OLE 控制項和其他優化的詳細資訊 GetControlFlags ,請參閱 ActiveX 控件:優化

COleControl::GetControlSize

擷取 OLE 控制元件視窗的大小。

void GetControlSize(
    int* pcx,
    int* pcy);

參數

pcx
以像素指定控制件的寬度。

pcy
指定控制元件的高度,以像素為單位。

備註

請注意,控件視窗的所有座標都相對於控件的左上角。

COleControl::GetDC

提供無視窗物件,從其容器取得螢幕(或相容)裝置內容。

CDC* GetDC(
    LPCRECT lprcRect = NULL,
    DWORD dwFlags = OLEDC_PAINTBKGND);

參數

lprcRect
無視窗控制項想要在控制元件的用戶端座標中重新繪製矩形的指標。 NULL 表示完整的物件範圍。

dwFlags
繪製裝置內容的屬性。 選項包括:

  • OLEDC_NODRAW 指出物件不會使用裝置內容來執行任何繪圖,而只是為了取得顯示裝置的相關信息。 容器應該只會傳遞視窗的DC,而不需進一步處理。

  • OLEDC_PAINTBKGND要求容器在傳回DC之前繪製背景。 如果物件要求DC以重新繪製具有透明背景的區域,則對象應該使用此旗標。

  • OLEDC_OFFSCREEN通知容器物件想要轉譯成螢幕外位圖,然後應該複製到畫面。 對象在繪製作業即將執行的繪圖作業時,應該使用這個旗標來產生許多閃爍。 容器可以免費接受此要求。 不過,如果未設定此旗標,容器必須交回螢幕上的DC。 這可讓物件執行直接螢幕作業,例如顯示選取專案(透過 XOR 作業)。

傳回值

如果成功,則為容器 CWnd 工作區的顯示裝置內容指標,否則傳回值為 NULL。 顯示裝置內容可用於後續的 GDI 函式,以在容器視窗的工作區中繪製。

備註

必須呼叫 ReleaseDC 成員函式,才能在繪製之後釋放內容。 呼叫 GetDC時,對象會傳遞想要在自己的用戶端座標中繪製的矩形。 GetDC 將這些轉譯為容器工作區的座標。 對象不應該要求比自己的工作區矩形更大的所需繪圖矩形,其大小可以使用 GetClientRect 擷取。 這可防止物件不小心繪製它們不應該繪製的位置。

COleControl::GetEnabled

實作控件的 Stock Enabled 屬性的 Get 函式。

BOOL GetEnabled();

傳回值

如果控件已啟用,則為非零;否則為 0。

COleControl::GetExtendedControl

取得容器所維護之物件的指標,此物件代表具有擴充屬性集的控件。

LPDISPATCH GetExtendedControl();

傳回值

容器擴充控件物件的指標。 如果沒有可用的物件,則值為 NULL。

此物件可透過其 IDispatch 介面操作。 您也可以使用 QueryInterface 來取得 物件所提供的其他可用介面。 不過,不需要物件才能支援一組特定的介面。 請注意,依賴容器擴充控件物件的特定功能,會將控件的可移植性限製為其他任意容器。

備註

呼叫此函式的函式負責在完成物件時釋放指標。 請注意,不需要容器才能支援這個物件。

COleControl::GetFocus

判斷物件是否 COleControl 具有焦點。

CWnd* GetFocus();

傳回值

如果控件已啟動且無視窗,則傳回控件目前具有鍵盤焦點(如控件的容器所決定),如果控件沒有焦點,則傳回 this NULL。

否則,傳 CWnd 回具有焦點的物件(與 CWnd::GetFocus相同)。

備註

呼叫 SetFocus,啟動的無視窗控制件會收到焦點。

COleControl::GetFont

實作 stock Font 屬性的 Get 函式。

LPFONTDISP GetFont();

傳回值

控件之 stock Font 屬性之字型發送介面的指標。

備註

請注意,呼叫端必須在完成時釋放 物件。 在控件的實作中,使用 InternalGetFont 來存取控件的 Stock Font 物件。 如需在控件中使用字型的詳細資訊,請參閱 ActiveX 控件:在 ActiveX 控制件中使用字型一文

COleControl::GetFontTextMetrics

測量控件所擁有之任何 CFontHolder 物件的文字計量。

void GetFontTextMetrics(
    LPTEXTMETRIC lptm,
    CFontHolder& fontHolder);

參數

lptm
TEXTMETRIC 結構的指標。

fontHolder
CFontHolder 對象的參考。

備註

您可以使用 COleControl::SelectFontObject 函式來選取 這類字型GetFontTextMetrics會初始化 lptm 所指向的結構,TEXTMETRIC其中包含成功時,其字型的有效fontHolder計量資訊,或在未成功時以零填滿結構。 當您繪製控件時,您應該使用此函式,而不是 GetTextMetrics ,因為控件,就像任何內嵌的 OLE 對象一樣,可能需要將自己轉譯成元檔。

呼叫 SelectFontObject 函式時,會TEXTMETRIC重新整理預設字型的結構。 您應該只在選取 stock Font 屬性之後呼叫 GetFontTextMetrics ,以確保其提供的資訊有效。

COleControl::GetForeColor

實作 stock ForeColor 屬性的 Get 函式。

OLE_COLOR GetForeColor();

傳回值

如果成功,傳回值會將目前的前景色彩指定為OLE_COLOR值。 這個值可以轉譯成具有呼叫 TranslateColor的 COLORREF 值。

COleControl::GetHwnd

實作 stock hWnd 屬性的 Get 函式。

OLE_HANDLE GetHwnd();

傳回值

如果有任何,則為 OLE 控件的視窗句柄;否則為 NULL。

COleControl::GetMessageString

由架構呼叫以取得簡短字串,描述 nID識別功能表項的目的。

virtual void GetMessageString(
    UINT nID,
    CString& rMessage) const;

參數

nID
功能表項標識碼。

rMessage
CString 對象的參考,會透過該物件傳回字串。

備註

這可用來取得在醒目提示功能表項時顯示在狀態列中的訊息。 默認實作會嘗試載入 nID識別的字串資源。

COleControl::GetNotSupported

防止使用者存取控件的屬性值。

void GetNotSupported();

備註

呼叫此函式來取代控制項使用者擷取屬性的任何屬性的 Get 函式。 其中一個範例是只寫入的屬性。

COleControl::GetReadyState

傳回控件的整備狀態。

long GetReadyState();

傳回值

控件的整備狀態,下列其中一個值:

名稱 描述
READYSTATE_UNINITIALIZED 預設初始化狀態
READYSTATE_LOADING 控制件目前正在載入其屬性
READYSTATE_LOADED 控件已初始化
READYSTATE_INTERACTIVE 控件有足夠的數據可供互動,但尚未載入所有異步數據
READYSTATE_COMPLETE 控制件具有其所有數據

備註

大多數簡單的控件都不需要區分 LOADED 和 INTERACTIVE。 不過,支援數據路徑屬性的控件可能尚未準備好以異步方式接收某些數據,才能成為互動式控制件。 控制項應該嘗試儘快變成互動式。

COleControl::GetRectInContainer

取得控件矩形相對於容器的座標,以裝置單位表示。

BOOL GetRectInContainer(LPRECT lpRect);

參數

lpRect
將複製控件座標之矩形結構的指標。

傳回值

如果控件為就地作用中,則為非零;否則為 0。

備註

只有在控件就地作用中時,矩形才有效。

COleControl::GetStockTextMetrics

測量控件股票 Font 屬性的文字計量,其可使用 SelectStockFont 函式來選取

void GetStockTextMetrics(LPTEXTMETRIC lptm);

參數

lptm
TEXTMETRIC 結構的指標

備註

GetStockTextMetrics式會初始化 TEXTMETRIC lptm指向的結構,如果成功,則會使用有效的計量資訊,或在未成功時以零填滿結構。 在繪製控件時,請使用這個函式, 而不是 GetTextMetrics ,因為控件,就像任何內嵌的 OLE 對象一樣,可能需要將自己轉譯成元檔。

呼叫 函式時SelectStockFont,會TEXTMETRIC重新整理預設字型的結構。 只有在選取股票字型以確保其提供的資訊有效之後,才應該呼叫此函式。

COleControl::GetText

實作 stock Text 或 Caption 屬性的 Get 函式。

BSTR GetText();

傳回值

控件文字字串的目前值,如果沒有字串,則為零長度字串。

注意

如需 BSTR 數據類型的詳細資訊,請參閱 巨集和全域中的數據類型 一節。

備註

請注意,此函式的呼叫端必須在傳回的字串上呼叫 SysFreeString ,才能釋放資源。 在控件的實作中,使用 InternalGetText 來存取控件的股票 Text 或 Caption 屬性。

COleControl::GetWindowlessDropTarget

當您希望無視窗控制元件成為 OLE 拖放作業的目標時,請覆寫 GetWindowlessDropTarget

virtual IDropTarget* GetWindowlessDropTarget();

傳回值

對象的 IDropTarget 介面指標。 因為沒有視窗,所以無視窗對象無法註冊 IDropTarget 介面。 不過,若要參與拖放,無窗口物件仍然可以實作 介面,並在 中 GetWindowlessDropTarget傳回它。

備註

通常這會需要將控制項的視窗登錄為置放目標。 但是,由於控件沒有自己的視窗,因此容器會使用自己的視窗做為置放目標。 控件只需要提供介面的 IDropTarget 實作,容器可以在適當的時間委派呼叫。 例如:

IDropTarget *CMyAxCtrl::GetWindowlessDropTarget()
{
   m_xDropTarget.AddRef();
   return &m_xDropTarget;
}

COleControl::InitializeIIDs

通知控件將使用之 IID 的基類。

void InitializeIIDs(
    const IID* piidPrimary,
    const IID* piidEvents);

參數

piidPrimary
控件主要分派介面之介面標識符的指標。

piidEvents
控件事件介面之介面標識碼的指標。

備註

在控件的建構函式中呼叫此函式,以通知控件將使用之介面標識符的基類。

COleControl::InternalGetFont

存取控件的 stock Font 屬性

CFontHolder& InternalGetFont();

傳回值

包含 stock Font 物件的 CFontHolder 對象的參考

COleControl::InternalGetText

存取控件的內含文字或 Caption 屬性。

const CString& InternalGetText();

傳回值

控件文字字串的參考。

COleControl::InternalSetReadyState

設定控件的整備狀態。

void InternalSetReadyState(long lNewReadyState);

參數

lNewReadyState
要為控件設定的整備狀態,下列其中一個值:

名稱 描述
READYSTATE_UNINITIALIZED 預設初始化狀態
READYSTATE_LOADING 控制件目前正在載入其屬性
READYSTATE_LOADED 控件已初始化
READYSTATE_INTERACTIVE 控件有足夠的數據可供互動,但尚未載入所有異步數據
READYSTATE_COMPLETE 控制件具有其所有數據

備註

大多數簡單的控件都不需要區分 LOADED 和 INTERACTIVE。 不過,支援數據路徑屬性的控件可能尚未準備好以異步方式接收某些數據,才能成為互動式控制件。 控制項應該嘗試儘快變成互動式。

COleControl::InvalidateControl

強制控件重新繪製本身。

void InvalidateControl(
    LPCRECT lpRect = NULL,
    BOOL bErase = TRUE);

參數

lpRect
要失效之控件區域的指標。

bErase
指定在處理更新區域時,是否要清除更新區域內的背景。

備註

如果 lpRect 有 NULL 值,則會重新繪製整個控件。 如果 lpRect 不是 NULL,這表示要失效之控件矩形的部分。 如果控件沒有視窗,或目前沒有作用中,則會忽略矩形,並且呼叫用戶端網站的 IAdviseSink::OnViewChange 成員函式。 使用此函式, CWnd::InvalidateRect 而不是 或 InvalidateRect

COleControl::InvalidateRgn

使容器視窗在指定區域內的工作區失效。

void InvalidateRgn(CRgn* pRgn, BOOL bErase = TRUE);

參數

pRgn
CRgn 物件的指標,識別要失效之 OLE 對象的顯示區域,以包含視窗的用戶端座標。 如果此參數為 NULL,範圍就是整個物件。

bErase
指定是否要清除無效區域內的背景。 如果為 TRUE,則會清除背景。 如果為 FALSE,背景會維持不變。

備註

這可用來重新繪製容器內的無視窗控制件。 當傳送下一 個WM_PAINT 訊息時,無效的區域以及更新區域中的所有其他區域都會標示為繪製。

如果 更新區域的任何部分的 bErase 為 TRUE,則會清除整個區域中的背景,而不只是在指定的部分。

COleControl::IsConvertingVBX

允許特製化載入 OLE 控制件。

BOOL IsConvertingVBX();

傳回值

如果要轉換控件,則為非零;否則為 0。

備註

將使用 VBX 控制件的表單轉換成使用 OLE 控制件的表單時,可能需要特殊載入 OLE 控制件的程式代碼。 例如,如果您要載入 OLE 控制件的實體,您可能會在 中DoPropExchange呼叫 PX_Font

PX_Font(pPX, _T("Font"), *m_pMyFont, &DefaultFont);

不過,VBX控件沒有 Font 物件;每個字型屬性都會個別儲存。 在此情況下,您會使用 IsConvertingVBX 來區分這兩個案例:

if (!IsConvertingVBX())
{
   PX_Font(pPX, _T("Font"), *m_pMyFont, &DefaultFont);
}
else
{
   PX_String(pPX, _T("FontName"), tempString, DefaultName);
   m_pMyFont->m_pFont->put_Name(tempString.AllocSysString());
   PX_Bool(pPX, _T("FontUnderline"), tempBool, DefaultValue);
   m_pMyFont->m_pFont->put_Underline(tempBool);
}

另一個案例是,如果您的 VBX控件儲存了專屬的二進位數據(在其VBM_SAVEPROPERTY訊息處理程式中),而您的 OLE 控件會以不同的格式儲存其二進位數據。 如果您想要讓 OLE 控件與 VBX 控制件回溯相容,您可以使用 函式來讀取舊格式和新格式 IsConvertingVBX ,方法是區分正在載入 VBX 控件或 OLE 控件。

在控件的 函式中 DoPropExchange ,您可以檢查此條件,如果為 true,請執行此轉換特有的載入程式碼(例如先前的範例)。 如果控制項未轉換,您可以執行一般載入程式代碼。 這項功能僅適用於從 VBX 對應項目轉換的控制件。

COleControl::IsInvokeAllowed

啟用自動化方法調用。

BOOL IsInvokeAllowed(DISPID dispid);

傳回值

如果控件已初始化,則為非零;否則為 0。

備註

架構的呼叫IsInvokeAllowed實作IDispatch::Invoke,以判斷是否可以叫用指定的函式(由dispid識別)。 OLE 控制件的預設行為是只允許在初始化控件時叫用自動化方法;不過, IsInvokeAllowed 是虛擬函式,必要時可能會覆寫 (例如,當控件用作自動化伺服器時)。

COleControl::IsModified

判斷控件的狀態是否已修改。

BOOL IsModified();

傳回值

如果控件的狀態自上次儲存後已修改,則為非零;否則為 0。

備註

當屬性變更值時,會修改控件的狀態。

COleControl::IsOptimizedDraw

判斷容器是否支援目前繪圖作業的優化繪圖。

BOOL IsOptimizedDraw();

傳回值

如果容器支援目前繪圖作業的優化繪圖,則為TRUE;否則為 FALSE。

備註

如果支援優化的繪圖,則當繪圖完成時,控件不需要選取舊物件(手寫筆、筆刷、字型等)到裝置內容。

COleControl::IsSubclassedControl

由架構呼叫,以判斷控件是否子類別化 Windows 控件。

virtual BOOL IsSubclassedControl();

傳回值

如果控件為子類別,則為非零;否則為 0。

備註

如果您的 OLE 控制項子類別是 Windows 控制件,您必須覆寫此函式並傳回 TRUE。

COleControl::Load

重設以異步方式載入的任何先前數據,並起始控件異步屬性的新載入。

void Load(LPCTSTR strNewPath, CDataPathProperty& prop);

參數

strNewPath
字串的指標,包含參考異步控制屬性絕對位置的路徑。

支柱
作異步控件屬性的 CDataPathProperty 物件。

COleControl::LockInPlaceActive

防止容器停用您的控件。

BOOL LockInPlaceActive(BOOL bLock);

參數


如果控件的就地作用中狀態要鎖定,則為TRUE;如果要解除鎖定,則為 FALSE。

傳回值

如果鎖定成功,則為非零;否則為 0。

備註

請注意,完成時,控件的每個鎖定都必須與控件的解除鎖定配對。 您應該只在短時間內鎖定控件,例如引發事件時。

COleControl::OnAmbientPropertyChange

當容器的環境屬性變更值時,由架構呼叫。

virtual void OnAmbientPropertyChange(DISPID dispid);

參數

dispID
已變更之環境屬性的分派標識碼,如果有多個屬性已變更,則為DISPID_UNKNOWN。

COleControl::OnAppearanceChanged

當庫存外觀屬性值變更時,由架構呼叫。

virtual void OnAppearanceChanged ();

備註

如果您想要在此屬性變更之後通知,請覆寫此函式。 預設實作會呼叫 InvalidateControl

COleControl::OnBackColorChanged

當 stock BackColor 屬性值變更時,由架構呼叫。

virtual void OnBackColorChanged();

備註

如果您想要在此屬性變更之後通知,請覆寫此函式。 預設實作會呼叫 InvalidateControl

COleControl::OnBorderStyleChanged

當 stock BorderStyle 屬性值變更時,由架構呼叫。

virtual void OnBorderStyleChanged();

備註

預設實作會呼叫 InvalidateControl

如果您想要在此屬性變更之後通知,請覆寫此函式。

COleControl::OnClick

按兩下滑鼠按鈕或叫用 DoClick stock 方法時,由架構呼叫。

virtual void OnClick(USHORT iButton);

參數

iButton
滑鼠按鈕的索引。 可以有下列其中一個值:

  • LEFT_BUTTON按滑鼠左鍵。

  • MIDDLE_BUTTON按下滑鼠中間按鈕。

  • RIGHT_BUTTON按下滑鼠右鍵。

備註

預設實作會呼叫 COleControl::FireClick

覆寫此成員函式以修改或擴充默認處理。

COleControl::OnClose

當容器呼叫 控件的 IOleControl::Close 函式時,由架構呼叫。

virtual void OnClose(DWORD dwSaveOption);

參數

dwSaveOption
旗標,指出是否應該在載入之前儲存物件。 有效值為:

  • OLECLOSE_SAVEIFDIRTY

  • OLECLOSE_NOSAVE

  • OLECLOSE_PROMPTSAVE

備註

根據預設, OnClose 如果控件物件已修改,而且 dwSaveOption 是OLECLOSE_SAVEIFDIRTY或OLECLOSE_PROMPTSAVE,則會儲存它。

COleControl::OnDoVerb

當容器呼叫成員函式時,由架構呼叫 IOleObject::DoVerb

virtual BOOL OnDoVerb(
    LONG iVerb,
    LPMSG lpMsg,
    HWND hWndParent,
    LPCRECT lpRect);

參數

iVerb
要叫用之控件動詞的索引。

lpMsg
導致叫用動詞動詞的 Windows 訊息指標。

hWndParent
控件父視窗的句柄。 如果動詞執行會建立視窗(或視窗), 則 hWndParent 應該當做父代使用。

lpRect
將複製控件相對於容器之控件座標的 RECT 結構的指標。

傳回值

如果呼叫成功,則為非零;否則為 0。

備註

默認實作會使用ON_OLEVERB和ON_STDOLEVERB訊息對應項目來判斷要叫用的適當函式。

覆寫此函式以變更動詞的默認處理。

COleControl::OnDraw

由架構呼叫,以使用指定的裝置內容,在指定的周框中繪製 OLE 控件。

virtual void OnDraw(
    CDC* pDC,
    const CRect& rcBounds,
    const CRect& rcInvalid);

參數

pDC
繪圖所在的裝置內容。

rcBounds
控件的矩形區域,包括框線。

rcInvalid
無效之控件的矩形區域。

備註

OnDraw通常針對螢幕顯示呼叫,以 pDC 的形式傳遞螢幕裝置內容。 rcBounds 參數會識別目標裝置內容中的矩形(相對於其目前的對應模式)。 rcInvalid 參數是無效的實際矩形。 在某些情況下,這會是 比 rcBounds 較小的區域。

COleControl::OnDrawMetafile

由架構呼叫,以使用指定的元檔裝置內容,在指定的周框中繪製 OLE 控制件。

virtual void OnDrawMetafile(
    CDC* pDC,
    const CRect& rcBounds);

參數

pDC
繪圖所在的裝置內容。

rcBounds
控件的矩形區域,包括框線。

備註

默認實作會呼叫 OnDraw 函式。

COleControl::OnEdit

讓控件啟動UI。

virtual BOOL OnEdit(
    LPMSG lpMsg,
    HWND hWndParent,
    LPCRECT lpRect);

參數

lpMsg
叫用動詞的 Windows 訊息指標。

hWndParent
控件父視窗的句柄。

lpRect
容器中控件所使用之矩形的指標。

傳回值

如果呼叫成功,則為非零;否則為 0。

備註

這與叫用控件的OLEIVERB_UIACTIVATE動詞具有相同的效果。

此函式通常用於ON_OLEVERB訊息對應專案的處理程式函式。 這可在控件的 [物件] 選單上使用 「編輯」動詞。 例如:

ON_OLEVERB(AFX_IDS_VERB_EDIT, OnEdit)

COleControl::OnEnabledChanged

當庫存 Enabled 屬性值變更時,由架構呼叫。

virtual void OnEnabledChanged();

備註

如果您想要在此屬性變更之後通知,請覆寫此函式。 默認實作會呼叫 InvalidateControl

COleControl::OnEnumVerbs

當容器呼叫成員函式時,由架構呼叫 IOleObject::EnumVerbs

virtual BOOL OnEnumVerbs(LPENUMOLEVERB* ppenumOleVerb);

參數

ppenumOleVerb
列舉控件動詞命令的物件指標 IEnumOLEVERB

傳回值

如果有動詞可用,則為非零;否則為 0。

備註

默認實作會列舉訊息對應中的ON_OLEVERB專案。

覆寫此函式以變更列舉動詞的預設方式。

COleControl::OnEventAdvise

當事件處理程式與 OLE 控制件連線或中斷連線時,由架構呼叫。

virtual void OnEventAdvise(BOOL bAdvise);

參數

bAdvise
TRUE 表示事件處理程式已連線至控制件。 FALSE 表示事件處理程式已與控件中斷連線。

COleControl::OnFontChanged

當 stock Font 屬性值變更時,由架構呼叫。

virtual void OnFontChanged();

備註

預設實作會呼叫 COleControl::InvalidateControl。 如果控件是子類別化 Windows 控制件,預設實作也會將WM_SETFONT訊息傳送至控件的視窗。

如果您想要在此屬性變更之後通知,請覆寫此函式。

範例

void CMyAxCtrl::OnFontChanged()
{
   // Always set it to the container's font
   if (m_MyEdit.m_hWnd != NULL)
   {
      IFontDisp *pFontDisp = NULL;
      IFont *pFont = NULL;
      HRESULT hr;

      // Get the container's FontDisp interface
      pFontDisp = AmbientFont();
      if (pFontDisp)
      {
         hr = pFontDisp->QueryInterface(IID_IFont, (LPVOID*)&pFont);
         if (FAILED(hr))
         {
            pFontDisp->Release();
            return;
         }
      }

      HFONT hFont = NULL;
      if (pFont)
      {
         pFont->get_hFont(&hFont);
         m_MyEdit.SendMessage(WM_SETFONT, (WPARAM)hFont, 0L);
      }

      pFontDisp->Release();
   }

   // Invalidate the control
   m_MyEdit.Invalidate();
   m_MyEdit.UpdateWindow();

   COleControl::OnFontChanged();
}

COleControl::OnForeColorChanged

當 Stock ForeColor 屬性值變更時,由架構呼叫。

virtual void OnForeColorChanged();

備註

預設實作會呼叫 InvalidateControl

如果您想要在此屬性變更之後通知,請覆寫此函式。

COleControl::OnFreezeEvents

容器呼叫 之後,由架構呼叫 IOleControl::FreezeEvents

virtual void OnFreezeEvents(BOOL bFreeze);

參數

bFreeze
如果控件的事件處理已凍結,則為TRUE;否則為 FALSE。

備註

預設實作不做任何動作。

如果您想要在事件處理凍結或解除凍結時執行其他行為,請覆寫此函式。

COleControl::OnGetColorSet

當容器呼叫成員函式時,由架構呼叫 IViewObject::GetColorSet

virtual BOOL OnGetColorSet(
    DVTARGETDEVICE* ptd,
    HDC hicTargetDev,
    LPLOGPALETTE* ppColorSet);

參數

ptd
指向應該轉譯圖片的目標裝置。 如果此值為 NULL,則圖片應該轉譯為預設目標裝置,通常是顯示裝置。

hicTargetDev
指定 ptd指示之目標裝置上的資訊內容。 此參數可以是裝置內容,但不一定是裝置內容。 如果 ptd 為 NULL,hicTargetDev 也應該是 NULL。

ppColorSet
應複製一組色彩的位置指標。 如果函式未傳回色彩集,則會傳回 NULL。

傳回值

如果傳回有效的色彩集,則為非零;否則為 0。

備註

容器會呼叫此函式,以取得繪製 OLE 控件所需的所有色彩。 容器可以使用與設定整體調色盤所需的色彩搭配取得的色彩集。 默認實作會傳回 FALSE。

覆寫此函式以執行此要求的任何特殊處理。

COleControl::OnGetControlInfo

當控件的容器要求控件的相關信息時,由架構呼叫。

virtual void OnGetControlInfo(LPCONTROLINFO pControlInfo);

參數

pControlInfo
要填入之 CONTROLINFO 結構的指標。

備註

這項資訊主要是控件助記鍵的描述。 默認實作會 以預設資訊填滿 pControlInfo

如果您的控件需要處理助記鍵,請覆寫此函式。

COleControl::OnGetDisplayString

由架構呼叫以取得字串,表示 dispid識別之屬性的目前值。

virtual BOOL OnGetDisplayString(
    DISPID dispid,
    CString& strValue);

參數

dispid
控制項屬性的分派識別碼。

strValue
CString 對象的參考,會透過該物件傳回字串。

傳回值

如果 strValue 中 傳回字串,則為非零, 否則為 0。

備註

如果您的控制件具有無法直接轉換成字串的屬性,而且您希望屬性的值顯示在容器提供的屬性瀏覽器中,請覆寫此函式。

COleControl::OnGetInPlaceMenu

當控件啟動 UI 以取得要合併至容器現有功能表的功能表時,由架構呼叫。

virtual HMENU OnGetInPlaceMenu();

傳回值

控件功能表的句柄,如果控件沒有,則為NULL。 默認實作會傳回 NULL。

備註

如需合併 OLE 資源的詳細資訊,請參閱功能表和資源 (OLE) 一文

COleControl::OnGetNaturalExtent

由架構呼叫,以回應容器 IViewObjectEx::GetNaturalExtent 的要求。

virtual BOOL OnGetNaturalExtent(
    DWORD dwAspect,
    LONG lindex,
    DVTARGETDEVICE* ptd,
    HDC hicTargetDev,
    DVEXTENTINFO* pExtentInfo,
    LPSIZEL psizel);

參數

dwAspect
指定物件要進行表示的方式。 表示法包括內容、圖示、縮圖或列印檔。 有效值取自列舉 DVASPECT 或DVASPECT2。

lindex
感興趣的物件部分。 目前只有 -1 有效。

ptd
指向 DVTARGETDEVICE 結構,定義應該傳回物件大小的目標裝置。

hicTargetDev
指定由 ptd 參數指示的目標裝置資訊內容,物件可以從中擷取裝置計量及測試裝置的功能。 如果 ptd 為 NULL,對象應該忽略 hicTargetDev 參數中的值。

pExtentInfo
指向 DVEXTENTINFO 指定重設大小數據的結構。 結構 DVEXTENTINFO 為:

typedef struct tagExtentInfo
{
    UINT cb;
    DWORD dwExtentMode;
    SIZEL sizelProposed;
}   DVEXTENTINFO;

結構成員 dwExtentMode 可以接受兩個值的其中一個:

  • DVEXTENT_CONTENT詢問控制元件的大小應該如何完全符合內容(貼齊大小)

  • DVEXTENT_INTEGRAL重設大小時,將建議的大小傳遞至控制

psizel
指向控制項所傳回的數據大小調整。 針對未調整的任何維度,傳回的大小調整數據會設定為 -1。

傳回值

如果成功傳回或調整大小,則為非零;否則為 0。

備註

覆寫此函式,以傳回結構中最接近建議大小和 ex 帳篷模式 DVEXTENTINFO 的物件顯示大小。 默認實作會傳回 FALSE,而且不會調整大小。

COleControl::OnGetPredefinedStrings

由架構呼叫,以取得一組預先定義的字串,代表屬性的可能值。

virtual BOOL OnGetPredefinedStrings(
    DISPID dispid,
    CStringArray* pStringArray,
    CDWordArray* pCookieArray);

參數

dispid
控制項屬性的分派識別碼。

pStringArray
要填入傳回值的字串數位。

pCookieArray
要填入傳回值的 DWORD 陣列。

傳回值

如果元素已新增至 pStringArraypCookieArray,則為非零。

備註

如果您的控制件具有一組可由字串表示的可能值,請覆寫此函式。 針對每個新增至 pStringArray 的專案,您應該將對應的 “cookie” 元素新增至 pCookieArray。 這些「Cookie」值稍後可能會由架構傳遞至 函 COleControl::OnGetPredefinedValue 式。

COleControl::OnGetPredefinedValue

由架構呼叫,以取得對應至先前由 覆寫 COleControl::OnGetPredefinedStrings傳回之其中一個預先定義字串的值。

virtual BOOL OnGetPredefinedValue(
    DISPID dispid,
    DWORD dwCookie,
    VARIANT* lpvarOut);

參數

dispid
控制項屬性的分派識別碼。

dwCookie
先前由覆寫 傳回的 COleControl::OnGetPredefinedStringsCookie 值。

lpvarOut
VARIANT將傳回屬性值的結構指標。

傳回值

如果已在 lpvarOut傳回值,則為非零,否則為 0。

COleControl::OnGetViewExtent

由架構呼叫,以回應容器的 IViewObject2::GetExtent 要求。

virtual BOOL OnGetViewExtent(
    DWORD dwDrawAspect,
    LONG lindex,
    DVTARGETDEVICE* ptd,
    LPSIZEL lpsizel);

參數

dwDrawAspect
描述要顯示物件之表單或層面的 DWORD。 有效值取自列舉 DVASPECT 或DVASPECT2。

lindex
感興趣的物件部分。 目前只有 -1 有效。

ptd
指向 DVTARGETDEVICE 結構,定義應該傳回物件大小的目標裝置。

lpsizel
指向傳回物件大小的位置。

傳回值

如果成功傳回範圍資訊,則為非零;否則為 0。

備註

如果您的控件使用雙階段繪圖,且其不透明和透明元件有不同的維度,請覆寫此函式。

COleControl::OnGetViewRect

由架構呼叫,以回應容器 IViewObjectEx::GetRect 的要求。

virtual BOOL OnGetViewRect(DWORD dwAspect, LPRECTL pRect);

參數

dwAspect
描述要顯示物件之表單或層面的 DWORD。 有效值取自列舉 DVASPECT 或DVASPECT2:

  • DVASPECT_CONTENT整個物件的周框。 物件原點的左上角和大小等於 所 GetViewExtent傳回的範圍。

  • DVASPECT_OPAQUE具有矩形不透明區域的 物件會傳回該矩形。 其他失敗。

  • DVASPECT_TRANSPARENT矩形涵蓋所有透明或不規則的部分。

pRect
指向 RECTL 結構,指定應該繪製物件的矩形。 此參數會控制物件的位置和延展。

傳回值

如果成功傳回物件大小的矩形,則為非零;否則為 0。

備註

物件的大小會轉換成 OnGetViewRect 從特定位置開始的矩形(預設值為顯示器的左上角)。 如果您的控件使用雙階段繪圖,且其不透明和透明元件有不同的維度,請覆寫此函式。

COleControl::OnGetViewStatus

由架構呼叫,以回應容器 IViewObjectEx::GetViewStatus 的要求。

virtual DWORD OnGetViewStatus();

傳回值

如果成功,則為 VIEWSTATUS 列舉的其中一個值;否則為 0。 可能的值為下列任何組合:

名稱 描述
VIEWSTATUS_OPAQUE 物件完全不透明。 如果未設定此位,物件會包含透明元件。 此位僅適用於內容相關層面,不適用於DVASPECT_ICON或DVASPECT_DOCPRINT。
VIEWSTATUS_SOLIDBKGND 物件具有純色背景(由純色組成,而非筆刷圖樣)。 只有在設定VIEWSTATUS_OPAQUE,且僅適用於內容相關層面,而不是DVASPECT_ICON或DVASPECT_DOCPRINT時,這個位才有意義。
VIEWSTATUS_DVASPECTOPAQUE 對象支援DVASPECT_OPAQUE。 所有採用繪圖層面做為參數的 IViewObjectEx 方法都可以透過這個層面呼叫。
VIEWSTATUS_DVASPECTTRANSPARENT 對象支援DVASPECT_TRANSPARENT。 使用這個層面可以呼叫以繪圖層面作為參數的所有 IViewObjectEx 方法。

備註

如果您的控件使用雙階段繪圖,請覆寫此函式。 默認實作會傳回VIEWSTATUS_OPAQUE。

COleControl::OnHideToolBars

當控件停用UI時,由架構呼叫。

virtual void OnHideToolBars();

備註

實作應該隱藏 所 OnShowToolbars顯示的所有工具列。

COleControl::OnInactiveMouseMove

在收到WM_MOUSEMOVE訊息時,由非使用中物件的容器呼叫非使用中物件。

virtual void OnInactiveMouseMove(
    LPCRECT lprcBounds,
    long x,
    long y,
    DWORD dwKeyState);

參數

lprcBounds
物件周框,在包含視窗的用戶端座標中。 當收到WM_MOUSEMOVE訊息時,告知物件其在螢幕上的確切位置和大小。

x
滑鼠位置的 x 座標在包含視窗的用戶端座標中。

y
在包含視窗的用戶端座標中,滑鼠位置的 Y 座標。

dwKeyState
識別鍵盤上鍵盤輔助按鍵的目前狀態。 有效值可以是任何旗標的組合MK_CONTROL、MK_SHIFT、MK_ALT、MK_BUTTON、MK_LBUTTON、MK_MBUTTON和MK_RBUTTON。

備註

請注意,視窗用戶端座標(圖元)是用來傳遞滑鼠游標位置。 這也可以藉由在相同的座標系統中傳遞 物件的周框來達成。

COleControl::OnInactiveSetCursor

在收到WM_SETCURSOR訊息時,由非使用中物件的容器呼叫滑鼠指標下。

virtual BOOL OnInactiveSetCursor(
    LPCRECT lprcBounds,
    long x,
    long y,
    DWORD dwMouseMsg,
    BOOL bSetAlways);

參數

lprcBounds
物件周框,在包含視窗的用戶端座標中。 在收到WM_SETCURSOR訊息時,告知物件其在螢幕上的確切位置和大小。

x
滑鼠位置的 x 座標在包含視窗的用戶端座標中。

y
在包含視窗的用戶端座標中,滑鼠位置的 Y 座標。

dwMouseMsg
發生WM_SETCURSOR之滑鼠訊息的標識碼。

bSetAlways
指定物件是否必須設定游標。 如果為TRUE,對象必須設定游標;如果為 FALSE,則數據指標不一定要設定數據指標,而且應該在該情況下傳回S_FALSE。

傳回值

如果成功則為非零;否則為 0。

備註

請注意,視窗用戶端座標(圖元)是用來傳遞滑鼠游標位置。 這也可以藉由在相同的座標系統中傳遞 物件的周框來達成。

COleControl::OnKeyDownEvent

在處理庫存 KeyDown 事件之後,由架構呼叫。

virtual void OnKeyDownEvent(
    USHORT nChar,
    USHORT nShiftState);

參數

nChar
按下按鍵的虛擬按鍵碼值。 如需標準虛擬密鑰碼的清單,請參閱 Winuser.h

nShiftState
包含下列旗標的組合:

  • SHIFT_MASK動作期間按下 SHIFT 鍵。

  • CTRL_MASK動作期間按下 CTRL 鍵。

  • ALT_MASK動作期間按下 ALT 鍵。

備註

如果您的控件在引發事件之後需要存取金鑰資訊,請覆寫此函式。

COleControl::OnKeyPressEvent

在引發 Stock KeyPress 事件之後,由架構呼叫。

virtual void OnKeyPressEvent(USHORT nChar);

參數

nChar
包含按下按鍵的虛擬按鍵碼值。 如需標準虛擬密鑰碼的清單,請參閱 Winuser.h

備註

請注意, nChar 值可能已由容器修改。

如果您想要在此事件發生后通知,請覆寫此函式。

COleControl::OnKeyUpEvent

在處理庫存 KeyDown 事件之後,由架構呼叫。

virtual void OnKeyUpEvent(
    USHORT nChar,
    USHORT nShiftState);

參數

nChar
按下按鍵的虛擬按鍵碼值。 如需標準虛擬密鑰碼的清單,請參閱 Winuser.h

nShiftState
包含下列旗標的組合:

  • SHIFT_MASK動作期間按下 SHIFT 鍵。

  • CTRL_MASK動作期間按下 CTRL 鍵。

  • ALT_MASK動作期間按下 ALT 鍵。

備註

如果您的控件在引發事件之後需要存取金鑰資訊,請覆寫此函式。

COleControl::OnMapPropertyToPage

由架構呼叫,以取得實作指定屬性編輯之屬性頁的類別標識碼。

virtual BOOL OnMapPropertyToPage(
    DISPID dispid,
    LPCLSID lpclsid,
    BOOL* pbPageOptional);

參數

dispid
控制項屬性的分派識別碼。

lpclsid
CLSID將傳回類別標識碼的結構指標。

pbPageOptional
傳回指定屬性頁的使用是否為選擇性的指標。

傳回值

如果類別標識碼已在 lpclsid傳回,則為非零,否則為 0。

備註

覆寫此函式,以提供從容器屬性瀏覽器叫用控件屬性頁的方法。

COleControl::OnMnemonic

當容器偵測到已按下 OLE 控制件的助記鍵時,由架構呼叫。

virtual void OnMnemonic(LPMSG pMsg);

參數

pMsg
助憶鍵 (Mnemonic) 按鍵所產生之 Windows 訊息的指標。

COleControl::OnProperties

當容器叫用控件的屬性動詞時,由架構呼叫。

virtual BOOL OnProperties(
    LPMSG lpMsg,
    HWND hWndParent,
    LPCRECT lpRect);

參數

lpMsg
叫用動詞的 Windows 訊息指標。

hWndParent
控件父視窗的句柄。

lpRect
容器中控件所使用之矩形的指標。

傳回值

如果呼叫成功,則為非零;否則為 0。

備註

默認實作會顯示強制響應屬性對話方塊。

您也可以使用此函式來顯示控制元件的屬性頁。 呼叫 函OnProperties式,並在 hWndParent 參數中傳遞控件父系的句柄。 在此情況下,會忽略 lpMsg 和 lpRect 參數的值

COleControl::OnQueryHitPoint

由架構呼叫,以回應容器 IViewObjectEx::QueryHitPoint 的要求。

virtual BOOL OnQueryHitPoint(
    DWORD dwAspect,
    LPCRECT pRectBounds,
    POINT ptlLoc,
    LONG lCloseHint,
    DWORD* pHitResult);

參數

dwAspect
指定物件的表示方式。 有效值取自列舉 DVASPECT 或DVASPECT2。

pRectBounds
RECT結構的指標,指定 OLE 控件工作區的周框。

ptlLoc
結構的指標, POINT 指定要檢查點擊的點。 點是在 OLE 工作區座標中指定。

lCloseHint
定義「接近」到檢查點擊點的距離。

pHitResult
點擊查詢結果的指標。 下列其中一個值:

  • HITRESULT_OUTSIDE ptlLoc 不在 OLE 物件之外,而不是關閉。

  • HITRESULT_TRANSPARENT ptlLoc 位於 OLE 物件的界限內,但不靠近影像。 例如,透明圓形中間的點可能會HITRESULT_TRANSPARENT。

  • HITRESULT_CLOSE ptlLoc 位於 OLE 物件內部或外部,但足以讓對象在內部考慮。 小型、精簡或詳細物件可能會使用此值。 即使某個點位於物件的周框外,它可能仍然很接近(這是擊中小型物件所需的)。

  • HITRESULT_HIT ptlLoc 位於 物件的影像中。

傳回值

如果成功傳回點擊結果,則為非零;否則為 0。 點擊與 OLE 控制件顯示區域重疊。

備註

查詢對象的顯示矩形是否與指定的點重疊(叫用點)。 QueryHitPoint 可以覆寫以測試非矩形對象的點擊。

COleControl::OnQueryHitRect

由架構呼叫,以回應容器 IViewObjectEx::QueryHitRect 的要求。

virtual BOOL OnQueryHitRect(
    DWORD dwAspect,
    LPCRECT pRectBounds,
    LPCRECT prcLoc,
    LONG lCloseHint,
    DWORD* pHitResult);

參數

dwAspect
指定物件要進行表示的方式。 有效值取自列舉 DVASPECT 或DVASPECT2。

pRectBounds
RECT結構的指標,指定 OLE 控件工作區的周框。

prcLoc
結構的指標, RECT 指定要檢查點擊的矩形(與物件矩形重疊),相對於物件的左上角。

lCloseHint
未使用。

pHitResult
點擊查詢結果的指標。 下列其中一個值:

  • HITRESULT_OUTSIDE OLE 物件不會叫用矩形中的點。

  • HITRESULT_HIT矩形中至少有一個點會在 物件上叫用。

傳回值

如果成功傳回點擊結果,則為非零;否則為 0。

備註

查詢物件的顯示矩形是否與指定矩形中的任何點重疊(叫用矩形)。 QueryHitRect 可以覆寫以測試非矩形對象的點擊。

COleControl::OnRenderData

由架構呼叫,以擷取指定格式的數據。

virtual BOOL OnRenderData(
    LPFORMATETC lpFormatEtc,
    LPSTGMEDIUM lpStgMedium);

參數

lpFormatEtc
指向 FORMATETC 結構,指定要求資訊的格式。

lpStgMedium
指向要傳回數據的 STGMEDIUM 結構。

傳回值

如果成功則為非零;否則為 0。

備註

指定的格式是先前使用 DelayRenderDataDelayRenderFileData 成員函式在控件物件中放置的格式,以供延遲轉譯。 如果提供的儲存媒體是檔案或記憶體,則此函式的預設實作會分別呼叫 OnRenderFileDataOnRenderGlobalData。 如果要求的格式是CF_METAFILEPICT或持續性屬性集格式,則預設實作會轉譯適當的數據,並傳回非零值。 否則,它會傳回 0,而且不會執行任何動作。

如果 lpStgMedium-tymed> 是TYMED_NULL,則 STGMEDIUM 應該配置並填入,如 lpFormatEtc-tymed>指定。 如果未TYMED_NULL,STGMEDIUM 應該會填入數據。

覆寫此函式,以要求的格式和媒體提供您的數據。 視您的數據而定,您可能想要改為覆寫此函式的其他其中一個版本。 如果您的資料大小較小且大小固定,請覆寫 OnRenderGlobalData。 如果您的資料位於檔案中,或大小不一,請覆寫 OnRenderFileData

如需詳細資訊,請參閱 FORMATETC Windows SDK 中的 和 STGMEDIUM 結構。

COleControl::OnRenderFileData

架構呼叫,以在儲存媒體為檔案時擷取指定格式的數據。

virtual BOOL OnRenderFileData(
    LPFORMATETC lpFormatEtc,
    CFile* pFile);

參數

lpFormatEtc
指向 FORMATETC 結構,指定要求資訊的格式。

pFile
指向要轉譯數據的 CFile 物件。

傳回值

如果成功則為非零;否則為 0。

備註

指定的格式是先前使用 DelayRenderData 成員函式在控件物件中放置的格式,用於延遲轉譯。 此函式的預設實作只會傳回 FALSE。

覆寫此函式,以要求的格式和媒體提供您的數據。 視您的數據而定,您可能會想要改為覆寫此函式的其他其中一個版本。 如果您要處理多個儲存媒體,請覆寫 OnRenderData。 如果您的資料位於檔案中,或大小不一,請覆寫 OnRenderFileData

如需詳細資訊,請參閱 FORMATETC Windows SDK 中的 結構。

COleControl::OnRenderGlobalData

當指定的儲存媒體是全域記憶體時,由架構呼叫以指定格式擷取數據。

virtual BOOL OnRenderGlobalData(
    LPFORMATETC lpFormatEtc,
    HGLOBAL* phGlobal);

參數

lpFormatEtc
指向 FORMATETC 結構,指定要求資訊的格式。

phGlobal
指向要傳回數據之全域記憶體的句柄。 如果未配置記憶體,此參數可以是 NULL。

傳回值

如果成功則為非零;否則為 0。

備註

指定的格式是先前使用 DelayRenderData 成員函式在控件物件中放置的格式,用於延遲轉譯。 此函式的預設實作只會傳回 FALSE。

如果 phGlobal 為 NULL,則應該在 phGlobal 中 配置並傳回新的 HGLOBAL。 否則,phGlobal 所 指定的 HGLOBAL 應該填入數據。 放置於 HGLOBAL 的數據量不得超過記憶體區塊的目前大小。 此外,區塊無法重新配置為較大的大小。

覆寫此函式,以要求的格式和媒體提供您的數據。 視您的數據而定,您可能想要改為覆寫此函式的其他其中一個版本。 如果您要處理多個儲存媒體,請覆寫 OnRenderData。 如果您的資料位於檔案中,或大小不一,請覆寫 OnRenderFileData

如需詳細資訊,請參閱 FORMATETC Windows SDK 中的 結構。

COleControl::OnResetState

當控件的屬性應設定為預設值時,由架構呼叫。

virtual void OnResetState();

備註

默認實作會呼叫 DoPropExchange,傳遞 CPropExchange 會導致屬性設定為其預設值的物件。

控件寫入器可以在這個可覆寫的中插入 OLE 控件的初始化程序代碼。 呼叫 IPersistStream::Load 或 IPersistStorage::Load 失敗,或呼叫 IPersistStreamInit::InitNewIPersistStorage::InitNew 時,會呼叫此函式,而不需要先呼叫 IPersistStream::LoadIPersistStorage::Load

COleControl::OnSetClientSite

當容器呼叫 控件的 IOleControl::SetClientSite 函式時,由架構呼叫。

virtual void OnSetClientSite();

備註

根據預設, OnSetClientSite 檢查是否載入資料路徑屬性,以及是否為 ,會呼叫 DoDataPathPropExchange

覆寫此函式以執行此通知的任何特殊處理。 特別是,此函式的覆寫應該呼叫基類。

COleControl::OnSetData

由架構呼叫,以將控件的數據取代為指定的數據。

virtual BOOL OnSetData(
    LPFORMATETC lpFormatEtc,
    LPSTGMEDIUM lpStgMedium,
    BOOL bRelease);

參數

lpFormatEtc
指定數據格式之 FORMATETC 結構的指標。

lpStgMedium
數據所在的 STGMEDIUM 結構的指標。

bRelease
如果控件應該釋放儲存媒體,則為TRUE;如果控件不應該釋放儲存媒體,則為 FALSE。

傳回值

如果成功則為非零;否則為 0。

備註

如果數據採用永續性屬性集格式,默認實作會據以修改控件的狀態。 否則,預設實作不會執行任何動作。 如果 bRelease 為 TRUE,則會呼叫 ReleaseStgMedium ;否則為 。

覆寫此函式,以將控件的數據取代為指定的數據。

如需詳細資訊,請參閱 FORMATETC Windows SDK 中的 和 STGMEDIUM 結構。

COleControl::OnSetExtent

當控件的範圍需要變更時,由架構呼叫,因為呼叫 IOleObject::SetExtent

virtual BOOL OnSetExtent(LPSIZEL lpSizeL);

參數

lpSizeL
結構指標 SIZEL ,使用長整數來表示控件的寬度和高度,以 HIMETRIC 單位表示。

傳回值

如果已接受大小變更,則為非零;否則為 0。

備註

默認實作會處理控件範圍的大小調整。 如果控制元件為就地作用中,則會呼叫容器的 OnPosRectChanged

覆寫此函式以改變控件的預設重設大小。

COleControl::OnSetObjectRects

由架構呼叫以實作 IOleInPlaceObject::SetObjectRects 的呼叫

virtual BOOL OnSetObjectRects(
    LPCRECT lpRectPos,
    LPCRECT lpRectClip);

參數

lpRectPos
結構的指標 RECT ,表示控件相對於容器的新位置和大小。

lpRectClip
結構的指標 RECT ,表示要裁剪控件的矩形區域。

傳回值

如果已接受重新定位,則為非零;否則為 0。

備註

默認實作會自動處理控件視窗的重新定位和重設大小,並傳回 TRUE。

覆寫此函式以改變此函式的預設行為。

COleControl::OnShowToolBars

當控件已啟用UI時,由架構呼叫。

virtual void OnShowToolBars();

備註

預設實作不做任何動作。

COleControl::OnTextChanged

當庫存標題或 Text 屬性值變更時,由架構呼叫。

virtual void OnTextChanged();

備註

預設實作會呼叫 InvalidateControl

如果您想要在此屬性變更之後通知,請覆寫此函式。

COleControl::OnWindowlessMessage

由架構呼叫,以回應容器 IOleInPlaceObjectWindowless::OnWindowMessage 的要求。

virtual BOOL OnWindowlessMessage(
    UINT msg,
    WPARAM wParam,
    LPARAM lParam,
    LRESULT* plResult);

參數

msg
Windows 所傳遞的訊息標識碼。

wParam
由 Windows 傳遞。 指定其他訊息特定資訊。 此參數的內容取決於 msg 參數的值

lParam
由 Windows 傳遞。 指定其他訊息特定資訊。 此參數的內容取決於 msg 參數的值

plResult
Windows 結果碼。 指定訊息處理的結果,並取決於傳送的訊息。

傳回值

如果成功則為非零;否則為 0。

備註

處理無視窗控制件的視窗訊息。 COleControlOnWindowlessMessage的 應該用於滑鼠訊息和鍵盤訊息以外的視窗訊息。 COleControl 會特別提供 SetCaptureSetFocus ,以取得無視窗 OLE 對象的滑鼠擷取和鍵盤焦點。

因為無視窗對象沒有視窗,所以他們需要一個機制,讓容器將訊息分派給他們。 無視窗 OLE 物件會透過 OnWindowMessage 介面上的 IOleInPlaceObjectWindowless 方法從其容器取得訊息(無窗口支援的 IOleInPlaceObject 延伸模組)。 OnWindowMessage 不會採用 HWND 參數。

COleControl::P arentToClient

將 pPoint座標轉譯為用戶端座標。

virtual UINT ParentToClient(
    LPCRECT lprcBounds,
    LPPOINT pPoint,
    BOOL bHitTest = FALSE) const;

參數

lprcBounds
容器內 OLE 控制件界限的指標。 不是工作區,而是整個控件的區域,包括框線和滾動條。

pPoint
要轉譯為控件工作區座標之父代 (container) 點的指標。

bHitTest
指定是否要在點上完成點擊測試。

傳回值

如果 bHitTest 為 FALSE,則傳回 HTNOWHERE。 如果 bHitTest 為 TRUE,則傳回上層 (container) 點落在 OLE 控件工作區的位置,而且是下列其中一個滑鼠點擊測試值:

  • HTBORDER 在沒有重設大小框線的視窗框線中。

  • HTBOTTOM 在視窗的下水準框線中。

  • HTBOTTOMLEFT 在視窗框線的左下角。

  • HTBOTTOMRIGHT 在視窗框線的右下角。

  • 在標題欄區域中的HTCAPTION。

  • TCLIENT 在工作區中。

  • HTERROR 在螢幕背景或視窗之間的分隔線上(與 HTNOWHERE 相同,不同之處在於 DefWndProc Windows 函式會產生系統嗶聲來指出錯誤)。

  • HTGROWBOX 在大小方塊中。

  • HTHSCROLL 在水平滾動條中。

  • HTLEFT 在視窗的左框線中。

  • HTMAXBUTTON 在 [最大化] 按鈕中。

  • HTMENU 在功能表區域中。

  • HTMINBUTTON 在 [最小化] 按鈕中。

  • HTNOWHERE 在螢幕背景或視窗之間的分隔線上。

  • HTREDUCE 在 [最小化] 按鈕中。

  • HTRIGHT 在視窗的右框線。

  • HTSIZE 大小方塊(與 HTGROWBOX 相同)。

  • HTSYSMENU 在 [控件] 功能表或子視窗中的 [關閉] 按鈕中。

  • HTTOP 在視窗的上方水平框線中。

  • HTTOPLEFT 在視窗框線的左上角。

  • HTTOPRIGHT 在視窗框線的右上角。

  • HTTRANSPARENT 在目前由另一個視窗所涵蓋的視窗中。

  • HTVSCROLL 在垂直滾動條中。

  • HTZOOM 在 [最大化] 按鈕中。

備註

在輸入 pPoint 上,相對於父系的原點(容器左上角)。 在輸出 pPoint 上,相對於 OLE 控制項工作區的原點(控件工作區左上角)。

COleControl::P ostModalDialog

通知容器已關閉強制回應對話框。

void PostModalDialog(HWND hWndParent = NULL);

參數

hWndParent
強制回應對話框的父視窗句柄。

備註

顯示任何強制回應對話框之後,呼叫此函式。 您必須呼叫此函式,容器才能啟用 所 PreModalDialog停用的任何最上層視窗。 此函式應該與的 PreModalDialog呼叫配對。

COleControl::P reModalDialog

通知容器即將顯示強制回應對話框。

void PreModalDialog(HWND hWndParent = NULL);

參數

hWndParent
強制回應對話框的父視窗句柄。

備註

顯示任何強制回應對話方塊之前,請先呼叫此函式。 您必須呼叫此函式,讓容器可以停用其所有最上層視窗。 顯示強制回應對話框之後,您接著必須呼叫 PostModalDialog

COleControl::RecreateControlWindow

終結並重新建立控件的視窗。

void RecreateControlWindow();

備註

如果您需要變更窗口的樣式位,可能需要這樣做。

COleControl::Refresh

強制重新貼上 OLE 控制件。

void Refresh();

備註

基類支援 COleControl 此函式做為 stock 方法,稱為 Refresh。 這可讓 OLE 控制件的使用者在特定時間重新貼上控制件。 如需此方法的詳細資訊,請參閱 ActiveX Controls:方法一文

COleControl::ReleaseCapture

釋放滑鼠擷取。

BOOL ReleaseCapture();

傳回值

如果成功則為非零;否則為 0。

備註

如果控件目前有滑鼠擷取,則會釋放擷取。 否則,此函式不會有任何作用。

COleControl::ReleaseDC

釋放無視窗控制件容器的顯示裝置內容,釋放裝置內容以供其他應用程式使用。

int ReleaseDC(CDC* pDC);

參數

pDC
識別要釋放的容器裝置內容。

傳回值

如果成功則為非零;否則為 0。

備註

應用程式必須針對 GetDC 的每個呼叫呼叫呼叫。ReleaseDC

COleControl::ReparentControlWindow

設定控件的父代。

virtual void ReparentControlWindow(
    HWND hWndOuter,
    HWND hWndParent);

參數

hWndOuter
控件視窗的句柄。

hWndParent
新父視窗的句柄。

備註

呼叫此函式以重設控件視窗的父代。

COleControl::ResetStockProps

將庫存屬性的狀態 COleControl 初始化為其預設值。

void ResetStockProps();

備註

屬性包括:外觀、BackColor、BorderStyle、Caption、Enabled、Font、ForeColor、hWnd 和 Text。 如需股票屬性的描述,請參閱 ActiveX 控件:新增庫存屬性

您可以使用 和 ResetVersion 來覆寫 COleControl::OnResetState,來改善控制件的二進位初始化效能ResetStockProps。 請參閱以下範例。 如需優化初始化的詳細資訊,請參閱 ActiveX 控件:優化

範例

void CMyAxCtrl::OnResetState()
{
   ResetVersion(MAKELONG(_wVerMinor, _wVerMajor));
   ResetStockProps();

   // initialize custom properties here
}

COleControl::ResetVersion

將版本號碼初始化為指定的值。

void ResetVersion(DWORD dwVersionDefault);

參數

dwVersionDefault
要指派給控件的版本號碼。

備註

您可以使用 和 ResetStockProps 來覆寫 COleControl::OnResetState,來改善控制件的二進位初始化效能ResetVersion。 請參閱 ResetStockProps範例。 如需優化初始化的詳細資訊,請參閱 ActiveX 控件:優化

COleControl::ScrollWindow

允許無視窗的 OLE 對象在畫面上捲動其就地使用中影像內的區域。

void ScrollWindow(
    int xAmount,
    int yAmount,
    LPCRECT lpRect = NULL,
    LPCRECT lpClipRect = NULL);

參數

xAmount
指定水平捲動的裝置單位數量。 此參數必須是負值,才能向左卷動。

yAmount
指定垂直捲動的裝置單位數量。 此參數必須是負值,才能向上捲動。

lpRect
指向 CRect 物件或 RECT 結構,指定要在包含視窗的用戶端座標中捲動 OLE 物件的工作區部分。 如果 lpRect 為 NULL,則會捲動整個 OLE 物件的工作區。

lpClipRect
CRect指向物件或RECT結構,指定要裁剪的矩形。 只會捲動矩形內的圖元。 即使位於 lpRect 矩形中,矩形外的位也不會受到影響。 如果 lpClipRect 為 NULL,則捲動矩形上不會執行任何裁剪。

COleControl::SelectFontObject

選取字型到裝置內容。

CFont* SelectFontObject(
    CDC* pDC,
    CFontHolder& fontHolder);

參數

pDC
裝置內容物件的指標。

fontHolder
CFontHolder 對象的參考,代表要選取的字型。

傳回值

先前選取字型的指標。 當呼叫端完成所有使用 fontHolder的繪圖作業時, 應該將它當做CDC::SelectObject 的參數 來重新選取先前選取的字型

COleControl::SelectStockFont

將 [字型] 屬性選取為裝置內容。

CFont* SelectStockFont(CDC* pDC);

參數

pDC
要在其中選取字型的裝置內容。

傳回值

先前選取 CFont 物件的指標。 當您完成時,您應該使用 CDC::SelectObject 將此字型選取回裝置內容。

COleControl::SerializeExtent

串行化或初始化配置給 控件的顯示空間狀態。

void SerializeExtent(CArchive& ar);

參數

ar
CArchive要串行化至或從中串行化的物件。

備註

您可以使用、 SerializeStockPropsSerializeVersion 來覆寫 COleControl::Serialize,來改善控制件的二進位持續性效能SerializeExtent。 請參閱以下範例。 如需優化初始化的詳細資訊,請參閱 ActiveX 控件:優化

範例

void CMyAxCtrl::Serialize(CArchive &ar)
{
   SerializeVersion(ar, MAKELONG(_wVerMinor, _wVerMajor));
   SerializeExtent(ar);
   SerializeStockProps(ar);

   if (ar.IsStoring())
   { // storing code
   }
   else
   { // loading code
   }
}

COleControl::SerializeStockProps

串行化或初始化股票屬性的狀態 COleControl :外觀、BackColor、BorderStyle、Caption、Enabled、Font、ForeColor 和 Text。

void SerializeStockProps(CArchive& ar);

參數

ar
CArchive要串行化至或從中串行化的物件。

備註

如需股票屬性的描述,請參閱 ActiveX 控件:新增庫存屬性

您可以使用、 SerializeExtentSerializeVersion 來覆寫 COleControl::Serialize,來改善控制件的二進位持續性效能SerializeStockProps。 如需範例,請參閱 SerializeExtent 上的程式碼。 如需優化初始化的詳細資訊,請參閱 ActiveX 控件:優化

COleControl::SerializeVersion

串行化或初始化控件版本信息的狀態。

DWORD SerializeVersion(
    CArchive& ar,
    DWORD dwVersionDefault,
    BOOL bConvert = TRUE);

參數

ar
CArchive要串行化至或從中串行化的物件。

dwVersionDefault
控制件的目前版本號碼。

bConvert
指出在儲存數據時,持續性數據是否應該轉換成最新的格式,或以載入時所採用的相同格式進行維護。

傳回值

控制件版本號碼。 如果正在載入指定的封存, SerializeVersion 則會傳回從該封存載入的版本。 否則,它會傳回目前載入的版本。

備註

您可以使用、 SerializeExtentSerializeStockProps 來覆寫 COleControl::Serialize,來改善控制件的二進位持續性效能SerializeVersion。 如需範例,請參閱 SerializeExtent 上的程式碼。 如需優化初始化的詳細資訊,請參閱 ActiveX 控件:優化

COleControl::SetAppearance

設定控制件的內含外觀屬性值。

void SetAppearance (short sAppearance);

參數

sAppearance
short 要用於控件外觀的 (VT_I2) 值。 零的值會將控件的外觀設定為平面,而值 1 會將控件的外觀設定為 3D。

備註

如需庫存屬性的詳細資訊,請參閱 ActiveX 控件:屬性

COleControl::SetBackColor

設定控件的 stock BackColor 屬性值。

void SetBackColor(OLE_COLOR dwBackColor);

參數

dwBackColor
要用於控件背景繪圖的OLE_COLOR值。

備註

如需使用此屬性和其他相關屬性的詳細資訊,請參閱 ActiveX Controls:Properties 一文

COleControl::SetBorderStyle

設定控件的 stock BorderStyle 屬性值。

void SetBorderStyle(short sBorderStyle);

參數

sBorderStyle
控件的新框線樣式;0 表示沒有框線,1 表示一般框線。

備註

然後會重新建立並 OnBorderStyleChanged 呼叫控件視窗。

COleControl::SetCapture

讓控件的容器視窗代表控件擁有滑鼠擷取。

CWnd* SetCapture();

傳回值

先前接收滑鼠輸入之 CWnd 視窗物件的指標。

備註

如果控件已啟用且無視窗,則此函式會代表控件的容器視窗取得滑鼠擷取。 否則,此函式會使控件本身擁有滑鼠擷取(與 CWnd::SetCapture相同)。

COleControl::SetControlSize

設定 OLE 控制件視窗的大小,並通知容器控制項網站正在變更。

BOOL SetControlSize(int cx, int cy);

參數

cx
以像素指定控件的新寬度。

cy
以像素指定控件的新高度。

傳回值

如果呼叫成功,則為非零;否則為 0。

備註

此函式不應用於控件的建構函式中。

請注意,控件視窗的所有座標都相對於控件的左上角。

COleControl::SetEnabled

設定控件的 Stock Enabled 屬性值。

void SetEnabled(BOOL bEnabled);

參數

bEnabled
如果要啟用控件,則為TRUE;否則為 FALSE。

備註

設定這個屬性之後, OnEnabledChange 就會呼叫 。

COleControl::SetFocus

讓控件的容器視窗代表控件擁有輸入焦點。

CWnd* SetFocus();

傳回值

先前具有輸入焦點之 CWnd 視窗物件的指標,如果沒有這類視窗,則為NULL。

備註

如果控件已啟用且無視窗,則此函式會代表控件取得輸入焦點的控件容器視窗。 輸入焦點會將鍵盤輸入導向至容器的視窗,而容器會將所有後續的鍵盤訊息分派給呼叫 SetFocus的 OLE 物件。 任何先前具有輸入焦點的視窗都會遺失它。

如果控制項不是無視窗,此函式會使控件本身擁有輸入焦點(與 CWnd::SetFocus相同)。

COleControl::SetFont

設定控件的 stock Font 屬性。

void SetFont(LPFONTDISP pFontDisp);

參數

pFontDisp
字型分派介面的指標。

COleControl::SetForeColor

設定控件的 stock ForeColor 屬性值。

void SetForeColor(OLE_COLOR dwForeColor);

參數

dwForeColor
要用於控件前景繪製的OLE_COLOR值。

備註

如需使用此屬性和其他相關屬性的詳細資訊,請參閱 ActiveX Controls:Properties 一文

COleControl::SetInitialDataFormats

由架構呼叫,以初始化 控件所支持的數據格式清單。

virtual void SetInitialDataFormats();

備註

默認實作會指定兩種格式:CF_METAFILEPICT和持續性屬性集。

COleControl::SetInitialSize

設定第一次顯示在容器中的 OLE 控制件大小。

void SetInitialSize(
    int cx,
    int cy);

參數

cx
OLE 控件的初始寬度,以像素為單位。

cy
以像素為單位的 OLE 控件初始高度。

備註

在您的建構函式中呼叫此函式,以設定控件的初始大小。 初始大小是以裝置單位或像素來測量。 建議您在控件的建構函式中呼叫此呼叫。

COleControl::SetModifiedFlag

變更控件的修改狀態。

void SetModifiedFlag(BOOL bModified = TRUE);

參數

bModified
控件修改旗標的新值。 TRUE 表示控件的狀態已修改;FALSE 表示控件的狀態剛剛儲存。

備註

每當發生會影響控件持續狀態的變更時,呼叫此函式。 例如,如果持續性屬性的值變更,請使用 bModified TRUE 呼叫此函式

COleControl::SetNotPermitted

表示編輯要求失敗。

void SetNotPermitted();

備註

失敗時 BoundPropertyRequestEdit 呼叫此函式。 此函式會擲回 類型的 COleDispScodeException 例外狀況,指出不允許設定作業。

COleControl::SetNotSupported

防止使用者修改控件的屬性值。

void SetNotSupported();

備註

呼叫此函式,取代任何屬性的 Set 函式,其中不支援控件的使用者修改屬性值。 其中一個範例是唯讀的屬性。

COleControl::SetRectInContainer

設定控件矩形相對於容器的座標,以裝置單位表示。

BOOL SetRectInContainer(LPCRECT lpRect);

參數

lpRect
矩形的指標,包含控件相對於容器的新座標。

傳回值

如果呼叫成功,則為非零;否則為 0。

備註

如果控件已開啟,則會重設大小;否則會呼叫容器的 OnPosRectChanged 函式。

COleControl::SetText

設定控件的 stock Caption 或 Text 屬性的值。

void SetText(LPCTSTR pszText);

參數

pszText
字元字串的指標。

備註

請注意,庫存標題和文字屬性都對應至相同的值。 這表示對任一屬性所做的任何變更都會自動變更這兩個屬性。 一般而言,控件應該支援 stock Caption 或 Text 屬性,但不能同時支援這兩者。

COleControl::ThrowError

發出控件中發生錯誤的訊號。

void ThrowError(
    SCODE sc,
    UINT nDescriptionID,
    UINT nHelpID = -1);

void ThrowError(
    SCODE sc,
    LPCTSTR pszDescription = NULL,
    UINT nHelpID = 0);

參數

sc
要報告的狀態代碼值。 如需可能程序代碼的完整清單,請參閱 ActiveX 控件:進階主題一

nDescriptionID
要報告之例外狀況的字串資源標識碼。

nHelpID
要回報之主題的說明標識碼。

pszDescription
字串,包含要報告之例外狀況的說明。

備註

此函式只應該從 OLE 屬性的 Get 或 Set 函式內呼叫,或 OLE 自動化方法的實作。 如果您需要發出其他時間發生的錯誤訊號,您應該引發庫存錯誤事件。

COleControl::TransformCoords

轉換 HIMETRIC 單位與容器原生單位之間的座標值。

void TransformCoords(
    POINTL* lpptlHimetric,
    POINTF* lpptfContainer,
    DWORD flags);

參數

lpptlHimetric
結構指標, POINTL 其中包含 HIMETRIC 單位中的座標。

lpptfContainer
POINTF結構指標,其中包含容器單位大小中的座標。

flags
下列值的組合:

  • XFORMCOORDS_POSITION容器中的位置。

  • XFORMCOORDS_SIZE容器中的 A 大小。

  • XFORMCOORDS_HIMETRICTOCONTAINER將 HIMETRIC 單位轉換成容器的單位。

  • XFORMCOORDS_CONTAINERTOHIMETRIC將容器的單位轉換成 HIMETRIC 單位。

備註

前兩個旗標,XFORMCOORDS_POSITION和XFORMCOORDS_SIZE,指出座標應該視為位置或大小。 其餘兩個旗標表示轉換的方向。

COleControl::TranslateColor

將色彩值從OLE_COLOR數據類型轉換成 COLORREF 數據類型。

COLORREF TranslateColor(
    OLE_COLOR clrColor,
    HPALETTE hpal = NULL);

參數

clrColor
OLE_COLOR數據類型。 如需詳細資訊,請參閱 Windows OleTranslateColor 函式。

hpal
選用調色盤的句柄;可以是 NULL。

傳回值

RGB(紅色、綠色、藍色)32 位色彩值,定義最接近 裝置可代表之 clrColor 值的純色。

備註

此函式有助於將 Stock ForeColor 和 BackColor 屬性轉譯為 CDC 成員函式所使用的 COLORREF 類型。

COleControl::WillAmbientsBeValidDuringLoad

決定當控件從其永續性狀態載入環境屬性值時,是否應該使用環境屬性值作為預設值。

BOOL WillAmbientsBeValidDuringLoad();

傳回值

非零表示環境屬性有效;否則環境屬性無效。

備註

在某些容器中,您的控件可能無法在初始呼叫 覆寫 COleControl::DoPropExchange期間存取其環境屬性。 如果容器在呼叫 IOleObject::SetClientSite 之前呼叫 IPersistStreamInit::Load 或 IPersistStorage::Load,就是這種情況(也就是說,如果它不接受OLEMISC_SETCLIENTSITEFIRST狀態位)。

COleControl::WindowProc

提供物件的 COleControl Windows 程式。

virtual LRESULT WindowProc(
    UINT message,
    WPARAM wParam,
    LPARAM lParam);

參數

message
指定要處理的 Windows 訊息。

wParam
提供處理訊息時所使用的其他資訊。 參數值取決於訊息。

lParam
提供處理訊息時所使用的其他資訊。 參數值取決於訊息。

傳回值

分派之訊息的傳回值。

備註

呼叫此函式,以透過控件的訊息對應分派特定訊息。

另請參閱

MFC 範例 CIRC3
MFC 範例 TESTHELP
COlePropertyPage 類別
CWnd 類別
階層架構圖表
CFontHolder 類別
CPictureHolder 類別