WebBrowserコントロール上で独自のコンテキストメニューを使用する

[戻る]
さみ 2007/12/04(火) 11:20:57
前回,『COleVariant付近でのアクセス違反』の質問でお世話になったasaです。
またまた質問させてください。

環境:Windous2003/VisualC++2005/MFC


ActiveXコントロールのWebBrowserコントロール上で右クリックをした際に出るコンテキ
ストメニューなのすが,
これを独自のものを使用したいと思っています。
しかし,WebBrowserがページを読み込んだ後だと,IE独自のコンテキストメニューがでて
きてしまいます。

このIE独自のものを無効にし,独自のものを使うための方法を教えていただきたいです。

調べてみたのですが,どうにも理解できず・・・
IDocHostUIHandlerを取得して使うという情報を見つけたのですが,この取得方法やどこ
でその指示をだしていいのかもわからりません。

手がかりなどでもいいので,どなたかアドバイスをお願いします。

さみ 2007/12/04(火) 11:23:01
>前回,『COleVariant付近でのアクセス違反』の質問でお世話になったasaです

asaではなく「さみ」ですね(^^;)失礼しました。

lng 2007/12/06(木) 13:22:12
ここに詳しい解説がありますよ。
http://msdn2.microsoft.com/en-us/library/aa770041.aspx
http://msdn2.microsoft.com/en-us/library/aa770042.aspx

さみ 2007/12/07(金) 10:48:03
[[解決]]
Ingさん,紹介していただきありがとうございます!

しかし,私,英語がかなり苦手でして・・・翻訳機にかけましたが,やはり微妙な日本語
になってしまいました。

今回はとりあえずコンテキストを諦め,ボタンでコンテキストの役目を果たさせるように
することにしました。
(こちらの事情で,近日中に審査があるため・・・)
ですが,その審査が終わったら取り組んでみようかと思います。

解決はしていませんが,資料も提供していただけたし,とりあえず難しいということがわ
かりましたので,解決ということにさせていただきます。

Ingさん,お相手していただきありがとうございました。

lng 2007/12/07(金) 13:19:41
よく考えたら、CHtmlViewとかですとPreTranslateMessageで
WM_CONTEXTMENUを捕捉して自前のを出せばすぐできるのでは。
上のリンクはIEのメニュー自体をカスタマイズしたりとか
より細かな制御をする方法みたいです。

さみ 2007/12/07(金) 16:49:04
Ingさん,アドバイスyありがとうございます。

残念ながら,私はCFormViewで作っていて,その上にWebBrowserコントロールを配置して
います。
それでも可能なのでしょうか?

私なりにPreTranslateMessageを使ってプログラム作ってみたんですが,やはりIEのコン
テキストが出てきちゃいました。
一応プログラム載せておきます。
何か間違いがあればご指摘お願いします。

【explorer1.cpp】
BOOL CExplorer1::PreTranslateMessage(MSG* pMsg, CPoint point)
{
    if(pMsg->message==WM_RBUTTONDOWN){
        CMainFrame *mainframe;
        CMenu *menu;
        CMenu *submenu;
        mainframe = (CMainFrame*)GetParentFrame();
        menu = mainframe->GetMenu();
        submenu = menu->GetSubMenu(1);                //項目の指定
        submenu->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y,
mainframe);

        return TRUE;
    }
    return CWnd::PreTranslateMessage(pMsg);
}

lng 2007/12/14(金) 14:06:05
WM_RBUTTONDOWNではなく、WM_RBUTTONUPのタイミングですと
捕捉できますね。あとは書かれている処理で大丈夫かと。

ただ、これはあくまでもマウス右ボタンが上がったとき限定で、
完全にコンテキストメニューを切る処理ではないので
注意してください。
(たとえばWebbrowserにフォーカスがある状態で右Windowsキーの
隣のメニューキーとかShift+F10などでもコンテキストメニュー
自体は出せます)

RAPT [HomePage] 2007/12/18(火) 03:45:58
ブラウザビュー上で、ホントのコンテキストメニュー(文脈メニュー)を
自前で実装するのはかなり難しいです。

IDocHostUIHandler::ShowContextMenu を実装したほうが楽ちんですよ。

古いスレッドには追加発言できません。