COleControl 類別
開發 OLE 控制項的強大基底類別。
語法
class COleControl : public CWnd
成員
公用建構函式
名稱 | 描述 |
---|---|
COleControl::COleControl | 建立 COleControl 物件。 |
公用方法
受保護的方法
名稱 | 描述 |
---|---|
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 控制件:優化。
繼承階層架構
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*。
請注意,已為通用環境屬性提供函式,例如 AmbientBackColor 和 AmbientFont。
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 陣列。
傳回值
如果元素已新增至 pStringArray 和 pCookieArray,則為非零。
備註
如果您的控制件具有一組可由字串表示的可能值,請覆寫此函式。 針對每個新增至 pStringArray 的專案,您應該將對應的 “cookie” 元素新增至 pCookieArray。 這些「Cookie」值稍後可能會由架構傳遞至 函 COleControl::OnGetPredefinedValue
式。
COleControl::OnGetPredefinedValue
由架構呼叫,以取得對應至先前由 覆寫 COleControl::OnGetPredefinedStrings
傳回之其中一個預先定義字串的值。
virtual BOOL OnGetPredefinedValue(
DISPID dispid,
DWORD dwCookie,
VARIANT* lpvarOut);
參數
dispid
控制項屬性的分派識別碼。
dwCookie
先前由覆寫 傳回的 COleControl::OnGetPredefinedStrings
Cookie 值。
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。
備註
指定的格式是先前使用 DelayRenderData 或 DelayRenderFileData 成員函式在控件物件中放置的格式,以供延遲轉譯。 如果提供的儲存媒體是檔案或記憶體,則此函式的預設實作會分別呼叫 OnRenderFileData
或 OnRenderGlobalData
。 如果要求的格式是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::InitNew 或 IPersistStorage::InitNew 時,會呼叫此函式,而不需要先呼叫 IPersistStream::Load
或 IPersistStorage::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。
備註
處理無視窗控制件的視窗訊息。 COleControl
OnWindowlessMessage
的 應該用於滑鼠訊息和鍵盤訊息以外的視窗訊息。 COleControl
會特別提供 SetCapture 和 SetFocus ,以取得無視窗 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
要串行化至或從中串行化的物件。
備註
您可以使用、 SerializeStockProps
和 SerializeVersion
來覆寫 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 控件:新增庫存屬性。
您可以使用、 SerializeExtent
和 SerializeVersion
來覆寫 COleControl::Serialize
,來改善控制件的二進位持續性效能SerializeStockProps
。 如需範例,請參閱 SerializeExtent 上的程式碼。 如需優化初始化的詳細資訊,請參閱 ActiveX 控件:優化。
COleControl::SerializeVersion
串行化或初始化控件版本信息的狀態。
DWORD SerializeVersion(
CArchive& ar,
DWORD dwVersionDefault,
BOOL bConvert = TRUE);
參數
ar
CArchive
要串行化至或從中串行化的物件。
dwVersionDefault
控制件的目前版本號碼。
bConvert
指出在儲存數據時,持續性數據是否應該轉換成最新的格式,或以載入時所採用的相同格式進行維護。
傳回值
控制件版本號碼。 如果正在載入指定的封存, SerializeVersion
則會傳回從該封存載入的版本。 否則,它會傳回目前載入的版本。
備註
您可以使用、 SerializeExtent
和 SerializeStockProps
來覆寫 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 類別