[D言語][Regnessem] AddInプラグインを作ってみる

昨日から一転今日はひまひま。
こっそり続きを作る。


さてさて、AddInプラグインのUIServiceでも登録してみよう。
ここはサービス名をUnicodeエンコードして送らなきゃならないので、
ここのtoWCS()を使わせてもらうことにしよう。
せっかくだからyaneSDK4Dもインストールしておこっと。
この場を借りて有用な情報を提供してくださっているやねうらお(id:yaneurao)さんはじめ、
皆さんに感謝。


以下は機能メニュー(SimpleUIにおいて)にサービスを追加するためのコード。
Regnessem メーリングリストにて公開されたサンプル(直リンク)をもとにしています。

bit isMunokunOn = false;

extern (Windows)
int UIService_Munokun_OnOff(WPARAM wParam, LPARAM lParam)
{
  PNsmUIServiceInfo pUI = (PNsmUIServiceInfo)lParam;
  if( pUI.nInfoKey == NMUI_GETCAPTION )
  {
    if ( !isMunokunOn )
      lstrcpyW( (LPCWSTR)pUI.lpInfo.lpBuffer, toWCSz(r"Onにする") );
    else
      lstrcpyW( (LPCWSTR)pUI.lpInfo.lpBuffer, toWCSz(r"Offにする") );
  }
  if( pUI.nInfoKey == NMUI_ONCLICK )
  {
    if ( !isMunokunOn )
    {
      isMunokunOn = true;
      MessageBox(null, r"Onにしました", "NSMSGS", MB_OK);
    }
    else
    {
      isMunokunOn = false;
      MessageBox(null, r"Offにしました", "NSMSGS", MB_OK);
    }
  }

  return 0;
}

あれー
表示が変わらないよ。"Onにする"が常に表示される。
Debugウィンドウで確認してみると…
CallService()で System/AddIn/UIService/Main/Enum が呼ばれてるのは
一回だけなのね。機能メニューをクリックする度に呼んでると思ってた。
ここは変えてほしいなあ。(ひとりごと)


もっというとチェックボタンを付けれたり階層化できたりするとなおいいけどなあ。
うーん。Delphiのソースではどこになるのかな?
Delphi読めないくせに言ってみるテスト。w


  追記:うわっ、変なサイト見つけた。strcpy系はやっぱりやばい?
  追記その2:カンケーないけどバグ ハケーン。SimpleUI\Skinsにフォルダが一つもない状態で「機能(F)->テーマを適用(X)」をポイントすると必ずインデックスエラーが出る。だからって実害ないけど。。(それゆえ放置されてると思われる)