基本的なコードの説明 Edit

DevStudio(VC++6.0)のアドインプロジェクトは「DevStudio Add-in Wizard」を選択して新規作成する。
コマンドの実装に必要な基本的なコードを以下に示す。

リソースIDR_TOOLBAR_LARGE大きいアイコンセット(32*32)
複数のアイコンが連結されたビットマップ画像となっており、左端から0,1,2...とIDを割り振ってアイコンを指定する。
IDR_TOOLBAR_MEDIUM小さいアイコンセット(16*16)
複数のアイコンが連結されたビットマップ画像となっており、左端から0,1,2...とIDを割り振ってアイコンを指定する。
CDSAddInクラスOnConnection()開発環境がアドインをロードしたときに呼び出されるハンドラ
ここで必要なコマンドの登録を行う
OnDisconnection()開発環境がアドインをアンロードしたときに呼び出されるハンドラ
IApplicationインタフェースAddCommand()コマンドを登録する関数
AddCommandBarButton()コマンドのツールバーを登録する関数
CCommandsクラスコマンドが実行されたときに処理を行うための関数を定義するクラス

コマンド登録の手順 Edit

以下、Fooというコマンドを登録する例を記述する。

  1. 実装
    1. ツールバーアイコンの準備
      IDR_TOOLBAR_LARGE と IDR_TOOLBAR_MEDIUM を編集して好きなアイコンを準備する。
    2. コマンドの名称と説明文を準備する
      ストリングテーブルに準備する例
      ID
      IDS_CMD_FOO_NAMEFoo
      IDS_CMD_FOO_STRING\nFoo\nFooコマンドを実行する\nFooコマンド
      ※あとで2つの文字列を連結してIApplication::AddCommand() の第1引数に渡す。この第1引数には、\nで区切られた4つの文字列を渡す必要がある。
       (1)コマンド名(ユニークな名称の必要がある)
       (2)ツールバー表示用のテキスト
       (3)コマンドの説明テキスト
       (4)ツールヒント用のテキスト
    3. コマンドの登録
      CDSAddIn::OnConnection()のコードを編集し、コマンドを登録する。登録は IApplication::AddCommand() と IApplication::AddCommandBarButton() を用いて行う。ウィザードによって追加されたサンプルコードが参考になるはず(このサンプルコードは邪魔なので必要無くなったら消した方がよい)。
      以下、Fooコマンドの登録例
        1
        2
        3
        4
        5
        6
        7
        8
        9
       10
       11
       12
       13
       14
       15
       16
       17
       18
       19
      
      :
          VARIANT_BOOL bRet;
          CString strCmdName;
          CString strCmdString;
          short   bmpOffset = 0;
       
          // Fooコマンドの登録
          strCmdName.LoadString(IDS_CMD_FOO_NAME);
          strCmdString.LoadString(IDS_CMD_FOO_STRING);
          strCmdString = strCmdName + strCmdString;
          VERIFY_OK(pApplication->AddCommand(CComBSTR(strCmdString), CComBSTR(strCmdName), bmpOffset++, m_dwCookie, &bRet));
          if(bRet == VARIANT_FALSE){
              *OnConnection = VARIANT_FALSE;
              return S_OK;
          }
          if(bFirstTime == VARIANT_TRUE){
              VERIFY_OK(pApplication->AddCommandBarButton(dsGlyph, CComBSTR(strCmdName), m_dwCookie));
          }
      :
      ※ここでは、コマンド名(IApplication::AddCommand()の第1引数の先頭文字列)と後で実装する関数名(IApplication::AddCommand()の第2引数)を同じにしているが、必ずしも同じにする必要は無い。
    4. コマンドに対応付けられるメソッドの追加
      クラスビューのツリーから「ICommands」を右クリックし、「メソッドの追加」を行う。(引数を持たないメソッドしか作成できない?)
      メソッドは、IApplication::AddCommand() の第2引数に渡した文字列と同じ名称にすること。この例では「Foo」メソッドを追加することになる。
    5. メソッドの実装
      CCommands::Foo() が追加されているので、実装を行う。
      実装の際、開発環境のオブジェクトを操作することができる。
      その場合は、CCommands::m_pApplication 変数を基に必要なオブジェクトを取得することになる。

      以下に、現在選択されている文字列を取得して前後に()を付与する例を示す。
        1
        2
        3
        4
        5
        6
        7
        8
        9
       10
       11
       12
       13
       14
       15
       16
       17
       18
       19
       20
       21
       22
       23
       24
       25
       26
       27
       28
       29
       30
      
          CComPtr<IDispatch> pDisp;
       
          // TextDocumentオブジェクトを取得する
          CComQIPtr<ITextDocument, &IID_ITextDocument> pTextDocument;
          m_pApplication->get_ActiveDocument(&pDisp);
          pTextDocument = pDisp;
          pDisp = NULL;
          if(!pTextDocument){
              return;
          }
       
          // TextSelectionオブジェクトを取得する
          CComQIPtr<ITextSelection, &IID_ITextSelection> pTextSelection;
          pTextDocument->get_Selection(&pDisp);
          pTextSelection = pDisp;
          pDisp = NULL;
          if(!pTextSelection){
              return;
          }
       
          // 選択中テキストを取得する
          BSTR    bstr;
          pTextSelection->get_Text(&bstr);
          CString strSelection(bstr);
       
          // 前後に()を付与
          strSelection = "(" + strSelection + ")";
       
          // テキストを挿入する
          pTextSelection->put_Text(strSelection.AllocSysString());

      また、DevStudioオブジェクトは引数にVariant型が使われている場合がある。そのようなプロパティやメソッドは下記のように使用できる。
        1
        2
        3
        4
      
          // TextSelectionオブジェクトのStartOfLineメソッドの使用例
          // CComVariantクラスを使用できる
          // dsFirstText や dsMove は enum定数として定義済みだが、数値を指定してもよい
          pTextSelection->StartOfLine(CComVariant(dsFirstText), CComVariant(dsMove));
  2. アドインの使用
    1. アドインの配置 実装が完了したら、ビルドを行う。作成されたDLLを開発環境のAddinフォルダに配置する。(C:\Program Files\Microsoft Visual Studio\COMMON\MSDev98\AddIns)
    2. アドインの登録 開発環境を起動し、メニューの「ツール」-「カスタマイズ」-「アドインおよびマクロファイル」を開くと、作成されたアドイン名が表示されているので、チェックを付けてダイアログを閉じる。
  3. その他 開発環境を操作したときのイベントに応じて処理を行いたい場合は、ウィザードによって追加されているイベントハンドラを実装する。
    CCommands::XApplicationEvents::*()Applicationオブジェクトのイベント
    CCommands::XDebuggerEvents::*()Debuggerオブジェクトのイベント

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2018-05-26 (土) 13:18:00 (2179d)