MFC ActiveX 控制項:進階屬性實作
本文說明在 ActiveX 控制項中實作進階屬性的相關主題。
重要
ActiveX 是不應該用於新開發的舊版技術。 如需取代 ActiveX 的新式技術詳細資訊,請參閱 ActiveX 控制項 。
唯讀和唯寫屬性
[新增屬性精靈] 提供快速且簡單的方法來實作控制項的唯讀或唯寫屬性。
實作唯讀或唯寫屬性
載入控制項專案。
在 [類別檢視] 中,展開控制項的程式庫節點。
在控制項的介面節點 (程式庫節點的第二個節點) 上按一下滑鼠右鍵,開啟捷徑功能表。
從快捷方式功能表中,按一下 [新增 ],然後按一下 [ 新增屬性 ]。
這會開啟 [ 新增屬性精靈 ]。
在 [ 屬性名稱] 方塊中,輸入屬性的名稱。
在 [實作類型] 中,按一下 [Get/Set 方法] 。
在 [ 屬性類型] 方塊中,選取屬性的適當類型。
如果您想要唯讀屬性,請清除 Set 函式名稱。 如果您想要唯寫屬性,請清除 Get 函式名稱。
按一下完成。
當您這樣做時,[新增屬性精靈] 會在分派對應專案中插入函 SetNotSupported
GetNotSupported
式,以取代一般 Set 或 Get 函式。
如果您想要將現有的屬性變更為唯讀或唯讀屬性,您可以手動編輯分派對應,並從控制項類別移除不必要的 Set 或 Get 函式。
如果您想要讓屬性有條件地唯讀或唯讀(例如,只有當控制項在特定模式中運作時),您可以如常提供 Set 或 Get 函式,並在適當時呼叫 SetNotSupported
或 GetNotSupported
函式。 例如:
void CMyAxUICtrl::SetMyProperty(SHORT newVal)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
if (m_bReadOnlyMode) // some control-specific state
{
SetNotSupported();
}
else
{
m_iPropVal = newVal; // set property as normal
SetModifiedFlag();
}
}
如果資料成員為 TRUE , m_bReadOnlyMode
則此程式碼範例會呼叫 SetNotSupported
。 如果 為 FALSE ,則 屬性會設定為新的值。
從屬性傳回錯誤碼
若要指出嘗試取得或設定屬性時發生錯誤,請使用 函 COleControl::ThrowError
式,此函式會採用 SCODE (狀態碼) 做為參數。 您可以使用預先定義的 SCODE,或定義您自己的 SCODE。 如需預先定義的 SCODEs 清單和定義自訂 SCODE 的指示,請參閱 ActiveX 控制項:進階主題一文中處理 ActiveX 控制項 中的錯誤。
協助程式函式適用于最常見的預先定義 SCODE,例如 COleControl::SetNotSupported、 COleControl::GetNotSupported 和 COleControl::SetNotPermitted 。
注意
ThrowError
只是用來作為從屬性的 Get 或 Set 函式或自動化方法傳回錯誤的方法。 這些只適用於適當的例外狀況處理常式會出現在堆疊上的時候。
如需在程式碼其他區域中報告例外狀況的詳細資訊,請參閱 ActiveX 控制項:進階主題一文中的 COleControl::FireError 和處理 ActiveX 控制項 中的錯誤一節 。
另請參閱
MFC ActiveX 控制項
MFC ActiveX 控制項:屬性
MFC ActiveX 控制項:方法
COleControl 類別