パソコン・メモメモ備忘録

気の向くままパソコン関係等で気になることを書き記す。時々更新!

CWebBrowser2 の DocumentComplete でページトップか判別

すげぇピンポイントのノウハウだと思うが。もし役に立つ人がいれば。

MFC で WebBrowser オブジェクト(コントロール?)をラップして使っている場合、DocumentComplete イベントで呼び出されるメソッドを作るのは簡単(だけどやり方わかるまで結構大変だったり..それは今回置いておく。もし聞きたい人はコメントにでも(^^)。しかし、このイベント、Frame とかがページ内にあると、それぞれの読み込み完了時すべてで発生してしまう。大抵欲しいのは、ページのトップのイベントだけ(最後に来るはず)。

で、どうすればいいかというと、なんか、WebBrowser オブジェクト自身の IDispatch のポインタを、イベントハンドラのメソッドのパラメータ(ややこし)で渡されるポインタと比較せよ、ということらしい。しかしながら、この IDispatch のポインタを得るのに QueryInterface() を使うらしいのだが、CWebBrowser2 から QueryInterface() を呼べるオブジェクトを見つけるのか全然わからなかった。

結局、get_Application() で得たポインタがそれらしい。

	IDispatchPtr pApp = pBrws->get_Application();

あっているのか全然わからないが、動いているのでいいことにしよう。あぁこわ。

ちなみに全く理解していないが、IDispatchPtr は C:\WINDOWS\system32\mshtml.tlb にある。とりあえず #import してみたが、これも MFC でラップすることもできる? ほんとこの辺は Microsoft の深淵だなぁ。