共用方式為


MFC ActiveX 控制項:進階屬性實作

本文說明在 ActiveX 控制項中實作進階屬性的相關主題。

重要

ActiveX 是不應該用於新開發的舊版技術。 如需取代 ActiveX 的新式技術詳細資訊,請參閱 ActiveX 控制項

唯讀和唯寫屬性

[新增屬性精靈] 提供快速且簡單的方法來實作控制項的唯讀或唯寫屬性。

實作唯讀或唯寫屬性

  1. 載入控制項專案。

  2. 在 [類別檢視] 中,展開控制項的程式庫節點。

  3. 在控制項的介面節點 (程式庫節點的第二個節點) 上按一下滑鼠右鍵,開啟捷徑功能表。

  4. 從快捷方式功能表中,按一下 [新增 ],然後按一下 [ 新增屬性 ]。

    這會開啟 [ 新增屬性精靈 ]。

  5. 在 [ 屬性名稱] 方塊中,輸入屬性的名稱。

  6. 在 [實作類型] 中,按一下 [Get/Set 方法]

  7. 在 [ 屬性類型] 方塊中,選取屬性的適當類型。

  8. 如果您想要唯讀屬性,請清除 Set 函式名稱。 如果您想要唯寫屬性,請清除 Get 函式名稱。

  9. 按一下完成

當您這樣做時,[新增屬性精靈] 會在分派對應專案中插入函 SetNotSupportedGetNotSupported 式,以取代一般 Set 或 Get 函式。

如果您想要將現有的屬性變更為唯讀或唯讀屬性,您可以手動編輯分派對應,並從控制項類別移除不必要的 Set 或 Get 函式。

如果您想要讓屬性有條件地唯讀或唯讀(例如,只有當控制項在特定模式中運作時),您可以如常提供 Set 或 Get 函式,並在適當時呼叫 SetNotSupportedGetNotSupported 函式。 例如:

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 類別