CHtmlViewのコンテキストメニューに独自項目を実装するには?

解決


fuji  2006-04-05 10:53:05  No: 61143  IP: 192.*.*.*

初投稿させていただきます。
(環境:VC++6.0 SP6 MFC使用 WindowsXP SP2)

CHtmlViewを使ったアプリケーションにて、ブラウザ上の
(IEコンポーネントの)コンテキストメニューに
独自の項目を追加しようと思い、
IDocHostUIHandler::ShowContextMenuを実装して独自の項目を
追加するところまでは出来たのですが、その項目のIDにて
ON_COMMANDでコマンドハンドラを実装してみたものの、
うまく捉まえることができません…
どこにどう追加したらメニュー項目を実装することが
できますでしょうか?
識者の方々、どうか御教授お願い致します。

編集 削除
dairygoods  2006-04-05 13:26:43  No: 61144  IP: 192.*.*.*

"WebBrowser Customization"
http://msdn.microsoft.com/workshop/browser/hosting/wbcustomization.asp

ここの、IDocHostUIHandler::ShowContextMenu というところに、
メニューをカスタマイズするサンプルがありますが、
参考になりますでしょうか?

編集 削除
fuji  2006-04-05 14:20:11  No: 61145  IP: 192.*.*.*

dairygoodsさんありがとうございます。

私もここのページを参考にメニュー追加を試していたのですが
項目を消したり追加はできるのですけど、自分で追加した項目を
どのようにハンドラと結びつければいいのかわからずにいます。
CHtmlViewクラスやCMainFrameクラスに書いても何の反応も無しなので…
そもそも別の実装が必要なのでしょうか…?

編集 削除
RAPT  2006-04-05 14:52:45  No: 61146  IP: 192.*.*.*

# MFCは詳しくありませんが・・・
メッセージマップに下記のように追加すればよいだけでは?
ON_COMMAND(ID_YOUR_MENU_ID, OnYourMenuID)

どこのクラスに書くかは、SendMessage() で指定したウィンドウの属する
クラスに書けば良いはずです。

編集 削除
dairygoods  2006-04-05 15:21:10  No: 61147  IP: 192.*.*.*

ハンドラと結び付けなくてもよければ、

int iSelection = ::TrackPopupMenu(...);
if (iSelection == 自分の) {
  // 自分の処理;
} else {
  // Send selected shortcut menu item command to shell
  LRESULT lr = ::SendMessage(hwnd, WM_COMMAND, iSelection, NULL);
}

でもよいでしょう。

編集 削除
fuji  2006-04-05 15:50:18  No: 61148  IP: 192.*.*.*

RAPTさん
dairygoodsさん
ありがとうございます。

さきほど、その前段階といいますか
追加した項目が無効のままになっていて悩んだんですが、
コールバックを設定してEnableMenuItemを行うことで
有効になりました。

ON_COMMANDについてはお二人のご意見を元に試してみたら
ちゃんと飛んできました!

これで無事に実装できそうです
RAPTさん、dairygoodsさん感謝です!

編集 削除
fuji  2006-04-05 15:51:33  No: 61149  IP: 192.*.*.*

あ、解決チェック忘れてました。
無事解決です

編集 削除