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 oSuperclass小畫家
重新繪製已從 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_ACTI加值稅EONENTRY | 當滑鼠在滑鼠移動作業期間輸入物件時,應該就地啟始物件。 |
POINTERINACTIVE_DEACTI加值稅EONLEAVE | 當滑鼠在滑鼠移動作業期間離開物件時,應該停用物件。 |
POINTERINACTIVE_ACTI加值稅EONDRAG | 當滑鼠在拖放作業期間將滑鼠拖曳到該物件上時,應該就地啟始物件。 |
備註
IPointerInactive
啟用介面時,容器會委派WM_SETCURSOR,並將訊息WM_MOUSEMOVE給它。 COleControl
此介面的實作會在適當地調整滑鼠座標之後,透過控制項的訊息對應分派這些訊息。
每當容器收到WM_SETCURSOR或WM_MOUSEMOVE訊息,並將滑鼠指標放在支援 IPointerInactive
的非使用中物件上時,它應該在 介面上呼叫 GetActivationPolicy
,並從 POINTERINACTIVE 列舉傳回旗標。
您可以將對應的專案新增至訊息對應,以像一般視窗訊息一樣處理這些訊息。 在您的處理常式中,避免使用 m_hWnd
成員變數(或任何使用它的成員函式),而不先檢查其值是否為非 Null。
任何想要執行超過設定滑鼠游標和/或引發滑鼠移動事件的物件,例如提供特殊的視覺回饋,都應該傳回POINTERINACTIVE_ACTI加值稅EONENTRY旗標,並只在作用中時繪製意見反應。 如果物件傳回此旗標,容器應該立即啟動它,然後將觸發呼叫 的相同訊息轉送至 GetActivationPolicy
。
如果傳回POINTERINACTIVE_ACTI加值稅EONENTRY和POINTERINACTIVE_DEACTI加值稅EONLEAVE旗標,則只有在滑鼠停留物件時,才會啟始物件。 如果只傳回POINTERINACTIVE_ACTI加值稅EONENTRY旗標,則只有在滑鼠第一次進入物件時,才會啟始物件一次。
您也可以讓非作用中的控制項成為 OLE 拖放作業的目標。 這需要在使用者將物件拖曳到控制項上方時啟動控制項,以便將控制項的視窗註冊為置放目標。 若要在拖曳期間發生啟用,請傳回POINTERINACTIVE_ACTI加值稅EONDRAG旗標:
DWORD CMyAxCtrl::GetActivationPolicy()
{
return POINTERINACTIVE_ACTIVATEONDRAG;
}
所 GetActivationPolicy
傳達的資訊不應由容器快取。 相反地,每次滑鼠進入非使用中物件時,都應該呼叫這個方法。
如果非作用中物件在滑鼠輸入時未要求就地啟動,則只要滑鼠指標停留在物件上,其容器應該呼叫 OnInactiveSetCursor ,以分派後續WM_SETCURSOR訊息給這個物件 。
啟用 IPointerInactive
介面通常表示您希望控制項能夠隨時處理滑鼠訊息。 若要在不支援 IPointerInactive
介面的容器中取得此行為,您必須在可見時一律啟動您的控制項,這表示控制項應該在其其他旗標中具有OLEMISC_ACTI加值稅EWHENVISIBLE旗標。 不過,若要防止此旗標在支援的 IPointerInactive
容器中生效,您也可以指定OLEMISC_IGNOREACTI加值稅EWHENVISIBLE旗標:
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
的 COLORRE光圈值。
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 函式,而不是 Begin小畫家 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_UIACTI加值稅E動詞具有相同的效果。
此函式通常用於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 或 IPersist儲存體::Load 失敗,或 IPersistStreamInit::InitNew 或 IPersist 時,會呼叫此函式儲存體::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);
參數
殘雪
以圖元指定控制項的新寬度。
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);
參數
殘雪
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 或 IPersist儲存體::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 類別
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應