Visual Studio ソリューション エクスプローラーを右クリックしたときに、[追加] メニュー項目のサブ メニューを追加するにはどうすればよいですか?
Visual Studio ソリューションを右クリックして表示される単一のサブ メニュー項目を追加し、そのメニューの [追加] オプションに移動する必要があります。
.vsct (vs パッケージ) を使用しようとしています。貴重な提案を手伝ってください
Visual Studio ソリューション エクスプローラーを右クリックしたときに、[追加] メニュー項目のサブ メニューを追加するにはどうすればよいですか?
Visual Studio ソリューションを右クリックして表示される単一のサブ メニュー項目を追加し、そのメニューの [追加] オプションに移動する必要があります。
.vsct (vs パッケージ) を使用しようとしています。貴重な提案を手伝ってください
もちろん、似たような質問はありますが、これは特殊なケースのようです...
一般に、拡張したいメニューのコマンドとパッケージ ID を知る必要があります。私は通常EnableVSIPLogging
、この記事で説明されているように、レジストリでオプションを有効にすることでこれを行います:
http://blogs.msdn.com/b/dr._ex/archive/2007/04/17/using-enablevsiplogging-to-identify-menus -and-commands-with-vs-2005-sp1.aspx . このEnableVSIPLogging
オプションは Visual Studio 2005 で導入されましたが、新しいバージョンでも機能します。
オプションを有効にすると、+EnableVSIPLogging
を押しながらメニュー項目 (またはコマンドと相互接続されたその他の UI 要素) をクリックすることで、必要な情報を表示できます。これにより、パッケージ GUID とコマンド/メニュー ID を含むメッセージ ボックスが表示されます。+表示されたメニューまたはコマンド データをクリップボードにコピーします。メニュー データに興味がある場合 (コンテキスト メニューの場合は、項目をホバーする前に+を押します)。CtrlShiftCtrlCCtrlShift
これは私が自分のマシンで得たものです...
---------------------------
VSDebug Message
---------------------------
Menu data:
Guid = {D309F791-903F-11D0-9EFC-00A0C911004F}
GuidID = 4
CmdID = 850
Type = 0x00000100
Flags = 0x00000000
NameLoc = A&dd
---------------------------
OK
---------------------------
VSCT
メニュー情報は、ファイルのオーサリングに使用できます。この質問はあなたの興味があるかもしれません: vsx を使用してコマンドでサブメニューを作成するにはどうすればよいですか?
他の質問の回答を読んでいると、これらの人がコマンド GUID の名前をどのように考え出したのか疑問に思うかもしれません...これらの名前はvsshlids.h
、Visual Studio SDK に含まれているヘッダー ファイルによって定義されます。したがって、上記の GUID については...
// Guid for Shell's group and menu ids
DEFINE_GUID (guidSHLMainMenu,
0xd309f791, 0x903f, 0x11d0, 0x9e, 0xfc, 0x00, 0xa0, 0xc9, 0x11, 0x00, 0x4f);
guidSHLMainMenu
グループ定義に使用できます...
<Group guid="your-command-set" id="your-group-id">
<Parent guid="guidSHLMainMenu" id="..." />
</Group>
コマンド id に一致するIDM_VS_CTXT_
定数 (または類似のもの)を見つけることを期待していましたが、違います... 代わりにと の定数を見つけました。そしてそれらを試してみました...vsshlids.h
cmdidShellWindowNavigate7
cmdidShellWindowNavigate5
stdidcmd.h
最初に、2 つのコマンド グループの新しい ID シンボルを作成しました...
<IDSymbol name="grpIdProjectContextAdd" value="0x1080" />
<IDSymbol name="grpIdSolutionContextAdd" value="0x1081" />
そして、コマンド...
<IDSymbol name="cmdIdAddItemHelloWorld" value="0x1082" />
新しいグループを定義したよりも。取得したコマンド識別子を親として使用しました...
<Groups>
<Group guid="your-command-set" id="grpIdProjectContextAdd">
<Parent guid="guidSHLMainMenu" id="cmdidShellWindowNavigate7" />
</Group>
<Group guid="your-command-set" id="grpIdSolutionContextAdd">
<Parent guid="guidSHLMainMenu" id="cmdidShellWindowNavigate5" />
</Group>
</Groups>
もちろん、ボタンが必要です (Add
デフォルトでプロジェクトのメニューに配置されています)。
<Commands>
<Button guid="your-command-set"
id="cmdIdAddItemHelloWorld" priority="0x1100" type="Button">
<Parent guid="your-command-set" id="grpIdProjectContextAdd" />
<Strings>
<ButtonText>Hello World</ButtonText>
</Strings>
</Button>
</Commands>
Add
ソリューション ノードのメニューにもボタンを表示するには、コマンド配置を使用します...
<CommandPlacements>
<CommandPlacement guid="your-command-set"
id="cmdIdAddItemHelloWorld" priority="0x1100">
<Parent guid="your-command-set" id="grpIdSolutionContextAdd" />
</CommandPlacement>
</CommandPlacements>
cmdidShellWindowNavigate7
私にとっては、と定数を使用するのは少しハックに感じますcmdidShellWindowNavigate5
が、結果としてこれが得られました...