WebBrowserコントロール上で独自のコンテキストメニューを使用する – プログラミング – Home

WebBrowserコントロール上で独...
 
通知
すべてクリア

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


さみ
 さみ
(@さみ)
ゲスト
結合: 17年前
投稿: 32
Topic starter  

前回,『COleVariant付近でのアクセス違反』の質問でお世話になったasaです。
またまた質問させてください。

環境:Windous2003/VisualC++2005/MFC

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

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

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

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


引用未解決
トピックタグ
さみ
 さみ
(@さみ)
ゲスト
結合: 17年前
投稿: 32
Topic starter  

>前回,『COleVariant付近でのアクセス違反』の質問でお世話になったasaです

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


返信引用
lng
 lng
(@lng)
ゲスト
結合: 18年前
投稿: 9
 

ここに詳しい解説がありますよ。
http://msdn2.microsoft.com/en-us/library/aa770041.aspx
http://msdn2.microsoft.com/en-us/library/aa770042.aspx


返信引用
さみ
 さみ
(@さみ)
ゲスト
結合: 17年前
投稿: 32
Topic starter  

Ingさん,紹介していただきありがとうございます!

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

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

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

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


返信引用
lng
 lng
(@lng)
ゲスト
結合: 18年前
投稿: 9
 

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


返信引用
さみ
 さみ
(@さみ)
ゲスト
結合: 17年前
投稿: 32
Topic starter  

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
 lng
(@lng)
ゲスト
結合: 18年前
投稿: 9
 

WM_RBUTTONDOWNではなく、WM_RBUTTONUPのタイミングですと
捕捉できますね。あとは書かれている処理で大丈夫かと。

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


返信引用
RAPT
 RAPT
(@RAPT)
ゲスト
結合: 22年前
投稿: 310
 

ブラウザビュー上で、ホントのコンテキストメニュー(文脈メニュー)を
自前で実装するのはかなり難しいです。

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


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました