決定要開啟專案中檔案的編輯器
當使用者在專案中開啟檔案時,環境會經歷輪詢流程,最後開啟該檔案的適當編輯器或設計工具。 對於標準編輯器和自訂編輯器,環境所採用的初始程序是相同的。 輪詢使用哪個編輯器開啟檔案時,環境會使用各種準則,而且 VSPackage 在此流程期間必須與環境協調。
例如,當使用者從 [檔案] 功能表選取 [開啟] 命令,然後選擇 filename.rtf (或任何其他具有 .rtf 副檔名的檔案),環境會呼叫每個專案的 IsDocumentInProject 實作,最終會循環查看方案中的所有專案執行個體。 項目會傳回一組旗標,這些旗標會依優先順序識別文件上的宣告。 使用最高優先順序,環境會呼叫適當的 OpenItem 方法。 有關輪詢流程的詳細資訊,請參閱新增專案和專案項目範本。
「其他檔案」專案會宣告其他專案未宣告的所有檔案。 如此一來,自訂編輯器就可以在標準編輯器開啟文件之前開啟文件。 如果「其他檔案」專案宣告檔案,則環境會呼叫 OpenStandardEditor 方法,以使用標準編輯器開啟檔案。 環境會檢查其已註冊編輯器的內部清單,以尋找處理 .rtf 檔案的編輯器。 這個清單位於下列機碼的登錄中:
HKEY_LOCAL_MACHINE\Software\Microsoft\VisualStudio\<version>\Editors\<editor factory guid>\Extensions
環境也會檢查 HKEY_CLASSES_ROOT\CLSID 機碼中具有子機碼 DocObject 的任何物件類別標別碼。 如果在那裡找到檔案副檔名,則會在 Visual Studio 中就地建立應用程式的內嵌式版本,例如:Microsoft Word。 這些文件物件必須是實作 IPersistStorage 介面的複合檔案,或者物件必須實作 IPersistFileFormat 介面。
如果登錄中沒有 .rtf 檔案的編輯器 Factory,則環境會在 HKEY_CLASSES_ROOT\.rtf 機碼中尋找,然後開啟該處指定的編輯器。 如果 HKEY_CLASSES_ROOT 中找不到副檔名,則環境會使用 Visual Studio 核心文字編輯器開啟檔案 (如果該檔案是文件檔案)。
如果核心文件編輯器失敗,如果檔案不是文件檔案,則環境將使用該檔案的二進位編輯器。
如果環境確實在其登錄中找到 .rtf 副檔名的編輯器,則會載入實作此編輯器 Factory 的 VSPackage。 環境會在新的 VSPackage 上呼叫 SetSite 方法。 VSPackage 會使用 RegisterEditor 方法呼叫 SID_SVsRegistorEditor
的 QueryService
,以向環境註冊編輯器 Factory。
環境現在會重新檢查其已註冊編輯器的內部清單,以尋找新註冊的編輯器 Factory 是否有 .rtf 檔案。 環境會呼叫 CreateEditorInstance 方法的實作,並傳入要建立的檔案名稱和檢視類型。