前回はウィザードに従うだけでしたが、とりあえずコマンドが一つ追加される拡張機能ができました。
コマンドの中身はコールバックメッソッドを弄れば好きに変更できます。古式ゆかしく、”Hello, World.” してみましょう。といってもウィザードで自動生成されたコードがメッセージボックスを表示する様になっているので出力されるテキストを書き換えるだけですが。
ウィザードが生成したコードでは「MenuItemCallback」というメッソド名になっています。

MenuItemCallbackの中身、表示されるメッセージを変更して。
private void MenuItemCallback(object sender, EventArgs e)
{
    IVsUIShell uiShell = (IVsUIShell)GetService(typeof(SVsUIShell));
    Guid clsid = Guid.Empty;
    int result;
    Microsoft.VisualStudio.ErrorHandler.ThrowOnFailure(uiShell.ShowMessageBox(
               0,
               ref clsid,
               "VSPackage1",
               "Hello, World.",
               string.Empty,
               0,
               OLEMSGBUTTON.OLEMSGBUTTON_OK,
               OLEMSGDEFBUTTON.OLEMSGDEFBUTTON_FIRST,
               OLEMSGICON.OLEMSGICON_INFO,
               0,        // false
               out result));
}
デバッグ実行。ツールメニューから「My Command name」をクリック。

メッセージボックスのテキストを書き換えただけでは寂しいので、エディタの現在行に出力してみます。
private void MenuItemCallback(object sender, EventArgs e)
{
    var dte = GetService(typeof(Microsoft.VisualStudio.Shell.Interop.SDTE)) as EnvDTE80.DTE2;
    var selection = dte.ActiveDocument.Selection as EnvDTE.TextSelection;
    selection.Insert("Hello, World.");
}
 
次はコマンドを増やしていきたいと思います。



