VSPackage は、Visual Studio コマンド テーブル (.vsct) ファイルを使用して、メニュー項目とその既定の状態を宣言します。 Visual Studio 統合開発環境 (IDE) では、VSPackage が読み込まれるまで、メニュー項目が既定の状態で表示されます。 その後、メニュー項目を有効または無効にするために、 QueryStatus メソッドが呼び出されます。
VSPackage ではレジストリ キーを設定できるため、コマンド ユーザー インターフェイス (UI) コンテキストに応じて VSPackage を自動的に読み込むことができますが、通常、ソース管理の VSPackage は、特定の UI コンテキストに切り替えるだけでなく、オンデマンドで読み込む必要があります。 AutoLoadPackages レジストリ キーの詳細については、「VSPackage の管理」を参照してください。
VSPackage ユーザーインターフェース (UI)
ソース管理パッケージは VSPackage として実装され、Visual Studio の UI は使用しません。 各ソース管理 VSPackage では、メニュー項目、メニュー グループ、ツール ウィンドウ、ツール バー、ソース管理 VSPackage に固有のオプションを設定するために必要な UI などの独自の UI 要素を指定する必要があります。 これらの UI 要素は、静的または動的に有効にすることができます。 静的 UI 要素は .vsct ファイルで定義され、VSPackage が読み込まれるかどうかに関係なく表示されます。 動的 UI 要素は、 vsContextNoSolutionなどの特定のコマンド UI コンテキストや、 QueryStatus メソッドの呼び出しの結果によって表示される場合があります。 動的 UI 要素の可視性は、VSPackage の遅延読み込みの戦略に準拠しています。
ソース管理 VSPackage の UI 制約
ソース管理 VSPackage は読み込まれた後に IDE から削除できないため、VSPackage は非アクティブな状態に入ることができる必要があります。 VSPackage がアクティブではなくなったという通知を受け取ると、VSPackage はその UI を無効にし、外部 IDE の対話を無視します。 VSPackage の QueryStatus メソッドの実装では、VSPackage がアクティブでない場合はコマンドを非表示にする必要があります。
すべてのソース管理 VSPackage は、 IVsSccProvider インターフェイスを実装する必要があります。 インターフェイスの 2 つのメソッド ( SetActive と SetInactive) は、VSPackage によって実装する必要があります。
ソース管理 VSPackage は、 IVsSolutionEvents3、 IVsTrackProjectDocumentsEvents2などによって実装されるさまざまな IDE イベントをサブスクライブしている可能性があります。 また、VSPackage には、 IVsSolutionPersistenceなどのレジストリが有効なコールバック インターフェイスが実装されている可能性があります。 非アクティブな場合、これらのインターフェイスはすべて無視する必要があります。
次の一覧は、ソース管理 VSPackage のアクティブな状態の影響を受けるインターフェイスを示しています。
プロジェクト ドキュメントのイベントを追跡します。
ソリューション イベント。
ソリューション永続化インターフェイス。 非アクティブな場合、パッケージは .sln ファイルと .suo ファイルに書き込むべきではありません。
プロパティ拡張機能
ソース管理 VSPackage が非アクティブな場合、必要な IVsQueryEditQuerySave2 と IVsSccManager2、およびソース管理に関連付けられている任意のインターフェイスは呼び出されません。
Visual Studio IDE が起動すると、Visual Studio はコマンド UI コンテキストを現在の既定のソース管理 VSPackage ID の ID に設定します。 これにより、アクティブなソース管理 VSPackage の静的 UI が、実際に VSPackage を読み込まずに IDE に表示されます。 Visual Studio は、IVsRegisterScciProvider を介して VSPackage が Visual Studio に登録されるまで一時停止し、それから VSPackage を呼び出します。
次の表では、Visual Studio IDE がさまざまな UI 項目を非表示にする方法に関する具体的な詳細について説明します。
| UI 項目 | Description |
|---|---|
| メニューとツール バー | ソース管理パッケージでは、.vsct ファイルの VisibilityConstraints セクションで、初期メニューとツール バーの表示状態をソース管理パッケージ ID に設定する必要があります。 これにより、Visual Studio IDE は、VSPackage を読み込み、 QueryStatus メソッドの実装を呼び出すことなく、メニュー項目の状態を適切に設定できます。 |
| ツール ウィンドウ | ソース管理 VSPackage では、非アクティブになったときに所有するツール ウィンドウが非表示になります。 |
| ソース管理 VSPackage 固有のオプション ページ | レジストリ キー HKLM\SOFTWARE\Microsoft\VisualStudio\X.Y\ToolsOptionsPages\VisibilityCmdUIContexts を使用すると、VSPackage はオプション ページを表示する必要があるコンテキストを設定できます。 このキーの下のレジストリ エントリは、ソース管理サービスのサービス ID (SID) を使用して作成し、DWORD 値 1 を割り当てる必要があります。 ソース管理 VSPackage が登録されているコンテキストで UI イベントが発生するたびに、アクティブな場合は VSPackage が呼び出されます。 |