How to: 使用 Interop 組件提供自訂工具箱項目
![]() |
---|
若要將自訂控制項加入至 [工具箱] 中的建議的方式是使用 Visual Studio 的 10 SDK 隨附的工具箱控制項樣板。本主題會保留僅供回溯相容性,並將現有的控制項加入至 [工具箱] 中。 如需有關如何使用範本建立工具箱控制項的詳細資訊,請參閱How to: 建立使用 Windows Form 的工具箱控制項和How to: 建立使用 WPF 的工具箱控制項。 |
可擴充 interop 組件為基礎的 VSPackage Visual Studio工具箱加上 ActiveX 控制項的功能。
為一系列標準Visual Studio工具箱剪貼簿格式,請參閱工具箱 (Visual Studio SDK)。
VSPackage 的管理方式的相關資訊的工具箱使用Visual Studio SDK,請參閱管理工具箱。
如需管理工具箱 「 自動化 」,請參閱如何:控制工具箱。
程序
若要新增的項目工具箱 應該實作標準 工具箱 剪貼簿格式加入項目 VSPackage 做為除非 工具箱項目提供者 — 提供實作支援新的格式。
若要實作工具箱控制項
A 工具箱 VSPackage 在 unmanaged 程式碼中實作所提供的項目必須是實作IDataObject物件,或者是 ActiveX 控制項 — 從環境可以獲得IDataObject物件。
如需有關實作IDataObject物件,以支援工具箱,請參閱IDataObject, TBXITEMINFO,以及FORMATETC。
若要將 interop 組件為基礎的控制項加入至工具箱
取得執行個體:
IVsToolbox2加入控制項及區段 (定位點) 的支援工具箱 ,以及控制其他方面的工具箱組態。
IVsToolbox3其中提供支援以配合當地語系化和Visual Studio設定持續性。
注意事項
IVsToolbox2 介面繼承自 IVsToolbox 介面。IVsToolbox3不是衍生自IVsToolbox2 ,但未實作它的方法。
IVsToolbox3與IVsToolbox2藉由呼叫QueryService上的方法SVsToolbox服務使用的服務 ID SID_SVsToolbox。
介面識別碼IID_IVSToolbox2用來取得IVsToolbox2,以及該介面識別碼IID_IVSToolbox3會傳回IVsToolbox3。
下列範例,在IVsToolbox2介面會取得與QueryService和IVsToolbox3介面,藉由呼叫QueryInterface上IVsToolbox2介面。
extern CComModule _Module; CComPtr<IVsToolbox2> srpTbx2; CComPtr<IVsToolbox3> srpTbx3; hr = _Module.QueryService(SID_SVsToolbox, IID_IVsToolbox2, (void**) &srpTbx2)); hr = srpTbx2->QueryInterface( IID_IVsToolbox3, (void **)&srpTbx3)
使用的執行個體IVsToolbox2和IVsToolbox3介面以加入索引標籤 (章節),再將控制項工具箱。
在下面範例中,新的索引標籤會加入與當地語系化的名稱,使用AddTab方法。
因為這個當地語系化的名稱不是不變,非當地語系化的非變異名稱 (在此情況下L"HTML") 由呼叫設定SetIDOfTab方法。
如果 [工具箱] 索引標籤已經存在, AddTab2會傳回的 E_FAIL,要擷取的非變異名稱由假設的索引標籤已適當地加入然後再嘗試的大小寫。
如果已成功地加入索引標籤,然後IDataObject-基礎的控制項加入至工具箱。 否則會傳回錯誤。
CComBSTR sbstrID; hr = srpTbx2->AddTab2((WCHAR*)szwDisplayTabName, *pclsidPackage); if ( hr == S_OK) { sbstrID =L"HTML"; hr = srpTbx3->SetIDOfTab( (WCHAR*)szwDisplayTabName, sbstrID); }else{ hr = S_OK; hr = srpTbx3->GetIDOfTab( (WCHAR*)szwDisplayTabName, &sbstrID ); } if ( hr = S_OK){ hr=srpTbx2->AddItem(tbxItem, &tinfo, bstrLabel); } return hr;
除了將加入工具箱 ,VSPackage 可以設定成工具箱資料提供者,可以用來擴充到拖放支援Visual Studio IDE。 這可以讓任意的剪貼簿格式,以公開給工具箱和編輯器。
若要將 VSPackage 設定為工具箱項目提供者
註冊 interop 式 VSPackage 與工具箱項目提供者。
如需詳細資訊,以適當地註冊工具箱提供者,請參閱正在註冊工具箱支援功能。
登錄為支援自訂工具箱的剪貼簿格式。
支援控制項不會實作所有標準的 interop 式 VSPackage 工具箱 剪貼簿格式,或實作自訂的 工具箱剪貼簿格式必須:
註冊其支援的工具箱剪貼簿格式。 如需詳細資訊,請參閱 正在註冊工具箱支援功能。
建立類別,實作IVsToolboxDataProvider和IVsToolboxDataProvider2介面。
注意事項
IVsToolboxDataProvider和IVsToolboxDataProvider2介面不應該實作相同類別上實作IVsPackage介面。
以程式設計的方式通知 [工具箱] 中的特定實作的IVsToolboxDataProvider和IVsToolboxDataProvider2介面支援自訂的資料格式的其中一種對等的方法 —RegisterDataProvider或RegisterDataProvider。
呼叫RegisterDataProvider方法的實作中通常是SetSite方法或在OnCreate VSPackage 成為作用中時的處理常式方法。
CComPtr<IVsToolboxDataProviderRegistry> pTB; if (SUCCEEDED (hr = pServiceProvider->QueryService(SID_SVsToolboxDataProviderRegistry, IID_IVsToolboxDataProviderRegistry, (PVOID*)&pTB)) && pTB != NULL) { CustToolboxDataProvider* pDP = new CustToolboxDataProvider; if (pDP) { pDP->AddRef(); VSCOOKIE dwDPCookie; //UNDONE: pass NULL instead of ptr to the cookie when RegisterDataProvider allows it. pTB->RegisterDataProvider((IVsToolboxDataProvider*)pDP, &dwDPCookie); pDP->Release(); } else { hr = E_OUTOFMEMORY; } }
為一系列標準Visual Studio工具箱剪貼簿格式,請參閱工具箱 (Visual Studio SDK)。