前回,『COleVariant付近でのアクセス違反』の質問でお世話になったasaです。
またまた質問させてください。
環境:Windous2003/VisualC++2005/MFC
ActiveXコントロールのWebBrowserコントロール上で右クリックをした際に出るコンテキ
ストメニューなのすが,
これを独自のものを使用したいと思っています。
しかし,WebBrowserがページを読み込んだ後だと,IE独自のコンテキストメニューがでて
きてしまいます。
このIE独自のものを無効にし,独自のものを使うための方法を教えていただきたいです。
調べてみたのですが,どうにも理解できず・・・
IDocHostUIHandlerを取得して使うという情報を見つけたのですが,この取得方法やどこ
でその指示をだしていいのかもわからりません。
手がかりなどでもいいので,どなたかアドバイスをお願いします。
>前回,『COleVariant付近でのアクセス違反』の質問でお世話になったasaです
asaではなく「さみ」ですね(^^;)失礼しました。
Ingさん,紹介していただきありがとうございます!
しかし,私,英語がかなり苦手でして・・・翻訳機にかけましたが,やはり微妙な日本語
になってしまいました。
今回はとりあえずコンテキストを諦め,ボタンでコンテキストの役目を果たさせるように
することにしました。
(こちらの事情で,近日中に審査があるため・・・)
ですが,その審査が終わったら取り組んでみようかと思います。
解決はしていませんが,資料も提供していただけたし,とりあえず難しいということがわ
かりましたので,解決ということにさせていただきます。
Ingさん,お相手していただきありがとうございました。
よく考えたら、CHtmlViewとかですとPreTranslateMessageで
WM_CONTEXTMENUを捕捉して自前のを出せばすぐできるのでは。
上のリンクはIEのメニュー自体をカスタマイズしたりとか
より細かな制御をする方法みたいです。
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);
}
WM_RBUTTONDOWNではなく、WM_RBUTTONUPのタイミングですと
捕捉できますね。あとは書かれている処理で大丈夫かと。
ただ、これはあくまでもマウス右ボタンが上がったとき限定で、
完全にコンテキストメニューを切る処理ではないので
注意してください。
(たとえばWebbrowserにフォーカスがある状態で右Windowsキーの
隣のメニューキーとかShift+F10などでもコンテキストメニュー
自体は出せます)
ブラウザビュー上で、ホントのコンテキストメニュー(文脈メニュー)を
自前で実装するのはかなり難しいです。
IDocHostUIHandler::ShowContextMenu を実装したほうが楽ちんですよ。