-rao-
hjmr9****@yahoo*****
2003年 5月 4日 (日) 04:29:06 JST
今のSimpleLogの実装はSimpleUIに負っているところが多すぎますので, まずはSimpleUIのほうの実装を変えたほうが良いと思っています. 表示をSimpleUIに任せるというのはやめて,必要ならSimpleLogのほうで表示す る(すなわちUFrmHistoryはSimpleUIから外す)べきだと思います. まだ細かいところは固まっていませんが,UIサービスというサービスのカテゴリ を作り,UIサービスが登録されていれば,プロトコルプラグインのUIサービスは 当該プロトコル接続の右クリックメニューに,AddInプラグインのUIサービスは 全てのプロトコルの右クリックメニューに自動的に登録されるというように SimpleUIの動作を変更することを考えています. プラグイン側は右クリックメニューに登録したいUIサービスを登録するだけです. ----- UIサービスの仕様 ----- 1) UIサービスの登録 右クリックメニューに登録したい項目があるプラグインは プロトコルプラグインの場合: /Protocol/<プロトコル名>/Connection/UIService/Member/<サービス名> /Protocol/<プロトコル名>/Connection/UIService/Group/<サービス名> /Protocol/<プロトコル名>/Connection/UIService/Tab/<サービス名> AddInプラグインの場合: /AddIn/<名前>/UIService/Member/<サービス名> /AddIn/<名前>/UIService/Group/<サービス名> /AddIn/<名前>/UIService/Tab/<サービス名> というUIサービスを登録します. これらのサービスは右クリックメニューに登録されます. 2) UIサービスの実装 UIサービスの仕様は以下の通り. Integer TNsmServiceProc(Cardinal wParam, Cardinal lParam); wParam: HNsmConnection. 0の時はメニューに登録するキャプションの取得要求 lParam: struct TNsmServiceInfoへのポインタ struct TNsmServiceInfo { Integer cbSize; // 構造体のサイズ=sizeof(TNsmServiceInfo) Integer nGroupId; // グループID LPCTSTR lpAccount; // アカウント名 PNsmInfo lpInfo; // 情報設定用 Integer nFlags; // 予約 }; [引数の内容] a) wParam = 0(キャプション取得要求)の場合 nGroupId = 不定 lpAccount = 不定 lpInfo->nType = NMIT_WIDESTRING lpInfo->lpBuffer = バッファ lpInfo->nBufferSize = lpBufferの大きさ b) wParam != 0(サービス実行)の場合 b-1) クリックされた対象がメンバの場合 (〜/UIService/Member/〜が呼び出された場合) nGroupId = メンバの所属するグループのID lpAccount = メンバのアカウント名 lpInfo = NULL b-2) クリックされた対象がグループの場合 (〜/UIService/Group/〜が呼び出された場合) nGroupId = グループのID lpAccount = NULL lpInfo = NULL [返り値] 失敗した場合 0 成功した場合 0以外 a) wParam = 0(キャプション取得要求)の場合には以下の情報も返す lpInfo->nType = NMIT_WIDESTRING lpInfo->lpBuffer = メニューに設定するキャプション lpInfo->nBufferSize = lpBufferの大きさ 設定例 wcsncpy(lpInfo->lpBuffer, <キャプション>, (lpInfo->nBufferSize)/2); 3) 特殊なUIサービス これまでのプラグインとの互換性維持のため,上記のフォーマットのUIサービス 以外に,以下のUIサービスは対応するキャプションと共に右クリックメニューに 登録される. サービス,メニュー項目 /Protocol/<プロトコル名>/Session/Open,"メッセージの送信" /Protocol/<プロトコル名>/Connection/AddMember,"新しいメンバの追加" /Protocol/<プロトコル名>/Connection/RemoveMember,"メンバの削除" /Protocol/<プロトコル名>/Connection/AddGroup,"新しいグループの追加" /Protocol/<プロトコル名>/Connection/RemoveGroup,"グループの削除" /Protocol/<プロトコル名>/Connection/ChangeGroupName,"グループ名の変更" ----- ここまで ----- 例えば,ログ表示プラグイン(ログ記録プラグインと同じプラグインとして実装 しても良いし,独立でも良い)は,"ログ表示" というキャプションで /AddIn/LogViewer/UIService/Member/ViewLog というサービスを登録しておき,当該メンバのログを表示すれば良い.ログのフォー マットや,どのように表示するかはログ記録プラグインとログ表示プラグインに 任せる. という感じです. -Rao- __________________________________________________ Do You Yahoo!? Yahoo! BB is Broadband by Yahoo! http://bb.yahoo.co.jp/