トップページ⇒tech
40コメント14KB

VCでIEのブラウザ画面を・・

■ このスレッドは過去ログ倉庫に格納されています
0001石田NGNG
VCで、ウィンドウの中にIEのブラウザ画面を埋め込みたい。
VBでは、WBオブジェクトを埋め込むだけでできるのに、
VCでは、結構手間かかるんですかねえ?
教えてください
0002デフォルトの名無しさんNGNG
CHtmlView
0003石田NGNG
MFC
つかいたくないんですけど・・・
0004デフォルトの名無しさんNGNG
おおグッドタイミング。俺も知りたいです。
自分で調べた成果、以下の2つのインタフェース実装は最低条件らしい。
・IWebBrowser2
・DWebBrowserEvents2

で、これらって派生させてメソッドのコード自分で書かないかんの?
簡単にんにインタフェース取得できんのかな。
CoGetWebBrowerみたいな関数あるとありがたいのに。
00054NGNG
で、サンプルほしいんで今日一日検索してたんだけど、VBとMFCばかり。
dountのソースが非MFCだったんだけど、独自ライブラリ使ってるので
解析難航しております。
0006デフォルトの名無しさんNGNG
>>5
独自ライブラリっていうかATL+WTLではなく?
00074NGNG
>>6
有名なのかな?無知ですいません。
0008デフォルトの名無しさんNGNG
MFCのソースを読むというのは?
0009わからんNGNG
私も興味があった一人なんですけど、結局、分かる人はいないのですか?
0010デフォルトの名無しさんNGNG
WTLで作られたブラウザがあるな・・
0011デフォルトの名無しさんNGNG
>>10
直前で外出
0012デフォルトの名無しさんNGNG
>>4
IWebBrowser2はIEコンポーネントが提供するインターフェイス。自分で実装
する必要はない。ていうか、こんなもん実装できるか。しないために、IEコンポーネントを
使う。
DWebBrowserEvents2はIWebBrowser2からのイベントを受けるイベントシンク。
こっちはコンテナ側が実装して、IWB2からのイベントを処理する。

IWebBrowser2のIFを得るには、CoCreateInstanceにCLSID_InternetExplorerや
CLSID_IWebBrowserを渡してやれば実体化できる。
CLSID_InternetExplorerを渡してもIEが実体化され起動したIEを制御できる
だけなので、あまり面白くない。が、IEの画面を別プロセスから制御するのは
見た目には面白いので素人ウケするかもしれない。
コントロールとして埋め込むにはCLSID_IWebBrowserを実体化する。
CLSID_IWebBrowser2の方を実体化するには、OleControlContainerになら
ないといけないらしい。その辺が恐ろしく面倒だということまではわかった。
素直に、MFCかWTLを使うのが良いと思う。そのためのMFCでありWTLなわけだし。
0013デフォルトの名無しさんNGNG
WSHの実行ログを表示するコンソールとして、IEを使っています。
00141ですがNGNG
結局みなさん、結論として途中までしかわからないというかんじでしょうか?
よかったらサンプルプログラムあるURL、書籍など教えてください!
0015デフォルトの名無しさんNGNG
ていうか、VC使いはMFC使った方が楽だからわざわざMFCを
使わない方法を考えない。(=車輪の再発明をしない)
0016デフォルトの名無しさんNGNG
>>15
同意。デル使いがVCLを使わない方法を考えないのと同じ。
00174NGNG
・インタフェースはIWebBrowser2
・DWebBrowserEvents2でIWebBrowser2のイベントを受け取る
・実体化はCoCreateInstanceでよい
・OleControlContainerにするのが面倒くさい

インターネット漁ったけど結局収穫無し。
むー、意地でも作りたくなってくるな。
00181ですが(石田)NGNG
みんなろくに解答してくれないのに、初心者たたきみたいに
うざいです。たぶん、実際に知っている連中なんだろうけど
そういう人は、こういうところだけで面と向かっては、
喧嘩うれない人ばっかだろうから
(ボクシングやってる自分としては、現実でも喧嘩うること
自体未熟といいたいけど)
流してみています。
4さん、同じ目的を持っているみたいですね!!
同盟をくみましょう
0019デフォルトの名無しさんNGNG
>>1
スレ眺めても別に叩いる奴なんていないと思うが・・・?
0020デフォルトの名無しさんNGNG
>>18
ボクシングのやりすぎで頭がおかしくなってしまったのでは?(叩き)
0021デフォルトの名無しさんNGNG
VBと同じようにやりたいのなら(藁

"VCで、ウィンドウの中にIEのブラウザ画面を埋め込むのに
VCでも、WBオブジェクトを埋め込むだけでできるのに、 "

MFC使いたくないとかワケのわからないことを言うから余計に
問題が複雑になっていると思われ。

VBと同じくダイアログベースだがな(藁
今やってみたが1分も掛からずに出来たぞ。

C++よくわからんからMFC使いたくないとかいうVB厨じゃないだろうな。
MFCとかWTLを使わない方がずーーーと難しいなんて事は分かって
ないと思われ。
0022デフォルトの名無しさんNGNG
>>18 あなたみたいなクレクレ厨房もうざいんですがね。
0023石井NGNG
すいません、このスレの人はまともでした
ほかのところでは、首つれだとか、糞食ってシネ だとか
丸一日へこみました
0024デフォルトの名無しさんNGNG
このスレの住人>>>>>>>>>>石井>>ほかのところ
0025デフォルトの名無しさんNGNG
2chで罵倒される人は、罵倒されるようなことをしてるのがほとんどだよ。
それが気づいているかいないかっていうだけ。

君は自分が自己中心的ってことに気づいてないだけ。
現実社会では人間関係もあってまわりがあわせてくれてるんだろうけど、
2chではそうはいかないってことだよ。

それがわかったら自己啓発セミナーにでも逝って更生しなさい
0026つーかNGNG
MFCじゃなくても
ActiveXオブジェクト(WebBrowser)をうめこめばいいだけでないの?
>21
0027デフォルトの名無しさんNGNG
>>1==石田==石本==石井はマゾだと思われ。
わざわざ罵倒されるようなことをする、わざわざMFCを使わない方法を探る、
わざわざ車輪を再発明しようとするetc
002821NGNG
>>26

MFCなしでVB厨にもActiveXオブジェクトに
簡単にアクセースできますか?
0029デフォルトの名無しさんNGNG
>>1
MFC がイヤなら ATL の CAxWindow を遣うのはどない?
メインウィンドウにフィットする子ウィンドウを作り、そいつを
CAxWindow オブジェクトにアタッチし、CreateControlEx()。

MFC も ATL もイヤで、ゼロから実装したいっつうなら、
他の人も言ってるように、OLE(ActiveX)の理解が必須。
「Inside OLE」とかを読んで、ActiveX コントロールとの連携方法を
ゼロから学習するしかないやろね。

素直になんらかのライブラリの恩恵を受けたほうがよいと思うよ。
0030デフォルトの名無しさんNGNG
>>29
MFCもATLも理解できない1にOLEを理解しろと言うのは不可能だ。
00311ですがNGNG
多分誤解を招いたかもしれません、1からWebブラウザを作るという意味
ではさすがにありません。
どうやら、ActiveXコントロールでWeb Browserオブジェクトを埋め込む
というのが有力みたいですね。
0032名無し関数のλさんNGNG
>>31
WTL 入れて ATL/WTL App Wizard に雛型を作らせて、それを出発点に
するのが良いと思う。

Use a view window にチェック入れて View Type を HTML Page にすれ
ば、CAxWindow を使って IE コンポーネント埋め込んだコードを書き出し
てくれる。これで QueryControl 使って IWebBrowser2 インターフェースを
取得すれば、とりあえず IE コンポーネントを操作できる。

例
----------
LRESULT OnFileNew(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
{
        // TODO: add code to initialize document
        HRESULT hr;
        CComPtr<IWebBrowser2> spBrowser;

        hr = m_view.QueryControl(&spBrowser);
        if (FAILED(hr))
                return 0;

        CComVariant ve;
        CComVariant vurl(_T("http://piza2.2ch.net/tech/index2.html"));
        spBrowser->Navigate2(&vurl, &ve, &ve, &ve, &ve);
                
        return 0;
}
----------

使いこなすには ATL/WTL のコードを読むのが必須ですが(WTL にいたっ
てはドキュメントないし)、それなりの力量が要求されます。読んで分からな
かったら諦めましょう。
00331ですがNGNG
なるほど!
32さんのアドバイスは簡潔かつ、参考になりました
ありがとうございます

・・・何人か、私になりすましてる・・・
00341ですがNGNG
なるほど!
32さんのアドバイスは簡潔かつ、参考になりました
ありがとうございます

・・・何人か、私になりすましてる・・・
00351ですがNGNG
なるほど!
32さんのアドバイスは簡潔かつ、参考になりました
ありがとうございます

・・・何人か、私になりすましてる・・・
0036デフォルトの名無しさんNGNG
  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄\
  |      呼んだ?         |
  \_______ ____/
              |/
           ∧⊂ヽ
           (゚Д゚)ノ
   ____/ |⊃ |\____
   \ 叩 / ̄ |   | ̄\ 氏 /
     \/   ⊂ ノ〜  \/
     /\ ((⊂∪⊃)) /\
   / 逝 \____/ 煽 \
     ̄ ̄ ̄ ̄\. 騙 ./ ̄ ̄ ̄ ̄
              \/
0037デフォルトの名無しさんNGNG
>>31
誰もそれ以外の方法を提案してないんだけど。
MFCやATL+WTLを使おうが使うまいが、「Web Browserコントロールを埋め込む」
ことには変わりない。
0038フレデリックNGNG
DWebBrowserEvents2はイベントソースだよ。
イベントを発信するのはあくまでコントロールだよ。
その実装がコンテナにあるんです。こちらをシンクといいます。
接続ポイントについて学ぶといいです。
0039デフォルトの名無しさんNGNG
donutのソース、それほどわかりにくいとは思えないんだが…
1の用途ならIWebBrower2のラッパークラスとして定義してるとこだけ
見れば済むんじゃないのか?
0040!1NGNG
>>39
これから詳しく読もうと思うんだけど、読むべきファイルについて助言を頼む。

ざっと見て MtlBrowser.h でラッパクラス CWebBrowser2 と IWebBrowserEvent2Impl
を定義して、それを ChildFrm.h で利用しているみたいだが、この二つを読めば OK?
■ このスレッドは過去ログ倉庫に格納されています