プロジェクト内のファイルを開くエディターを決定する
ユーザーがプロジェクト内のファイルを開くと、環境ではポーリング プロセスを実行し、最終的にそのファイルの適切なエディターまたはデザイナーを開きます。 環境で採用されている最初の手順は、標準のエディターとカスタム エディターの両方で同じです。 この環境では、ファイルを開くために使用するエディターをポーリングするときに、さまざまな基準を使用します。VSPackage では、このプロセス中に環境を調整する必要があります。
たとえば、ユーザーが [ファイル] メニューから [開く] コマンドを選択し、filename.rtf (または .rtf 拡張子を持つその他のファイル) を選択すると、環境では各プロジェクトの IsDocumentInProject 実装が呼び出され、最終的にはソリューション内のすべてのプロジェクト インスタンスで順番にこれが行われます。 プロジェクトによって、優先度によってドキュメントの要求を識別するフラグのセットが返されます。 最も高い優先度を使用すると、環境では適切な OpenItem メソッドが呼び出されます。 ポーリング プロセスの詳細については、「プロジェクト テンプレートとプロジェクト項目テンプレートの追加」を参照してください。
その他のファイル プロジェクトでは、他のプロジェクトによって要求されないすべてのファイルを要求します。 これにより、ドキュメントを標準のエディターで開く前にカスタム エディターで開くことができます。 その他のファイル プロジェクトによってファイルが要求された場合、環境では OpenStandardEditor メソッドを呼び出して、標準のエディターでファイルを開きます。 環境では、登録済みエディターの内部リストで、.rtf ファイルを処理するエディターを確認します。 このリストは、レジストリの次のキーにあります。
HKEY_LOCAL_MACHINE\Software\Microsoft\VisualStudio\<version>\Editors\<editor factory guid>\Extensions
また、環境では、サブキー DocObject を持つすべてのオブジェクトの HKEY_CLASSES_ROOT\CLSID キーのクラス識別子も確認します。 ここでファイル拡張子が見つかった場合は、Microsoft Word などの埋め込みバージョンのアプリケーションが Visual Studio 内の現在の場所に作成されます。 これらのドキュメント オブジェクトは、IPersistStorage インターフェイスを実装する複合ファイルである必要があるか、またはオブジェクトで IPersistFileFormat インターフェイスを実装する必要があります。
レジストリに .rtf ファイルのエディター ファクトリがない場合は、環境で HKEY_CLASSES_ROOT\.rtf キーを検索し、そこに指定されているエディターを開きます。 ファイル拡張子が HKEY_CLASSES_ROOT に見つからないとき、環境では Visual Studio のコア テキスト エディターを使用して、ファイルがテキスト ファイルである場合は開きます。
コア テキスト エディターが失敗した場合 (ファイルがテキスト ファイルでないときに発生します)、環境ではファイルにバイナリ エディターを使用します。
環境では、そのレジストリで .rtf 拡張子のエディターが見つかった場合、このエディター ファクトリを実装する VSPackage が読み込まれます。 環境で新しい VSPackage に対して SetSite メソッドが呼び出されます。 VSPackage では、RegisterEditor メソッドを使用して環境にエディター ファクトリを登録して、SID_SVsRegistorEditor
の QueryService
を呼び出します。
次に環境では、.rtf ファイル用に新しく登録されたエディター ファクトリを見つけるために、登録されているエディターの内部リストが再確認されます。 環境では、作成するファイル名とビューの種類を渡して、CreateEditorInstance メソッドの実装を呼び出します。