7

ウィンドウにWebブラウザコントロールを追加したい純粋なWin32アプリケーション(MFCなどはありません)があります。COMの基本を知っており、を使用してブラウザ用のCOMオブジェクトを作成できます。

 hr = CoCreateInstance(
    CLSID_WebBrowser,
    NULL,
    CLSCTX_INPROC,
    IID_IWebBrowser2,
    (void**) &pWebBrowser);

ただし、明らかに、IOleClientSite*を渡してSetClientSiteを呼び出す必要があります。このようなインターフェイスを取得するにはどうすればよいですか?この例では、独自のブラウザクラスを実装しています。このクラスは、そこから派生して実装することでインターフェイスを提供します(ここ)。私はその道をたどろうとしましたが、ブラウザクラスをインスタンス化するには、それを登録する必要があります(いいえ?)。これは非常に複雑に思えます。自分のオブジェクトを実装して登録するのではなく、既存のCOMオブジェクトを使用したいだけです。私は何が欠けていますか?

アプリケーションの一部として独自のClientSiteクラスを実装していると仮定すると、それを登録せずに、を呼び出してインスタンス化するnew ClientSite(そして、を使用してインターフェイスをフェッチするQueryInterface)ことは可能ですか?これは機能しますか、それとも電話する必要がありますCoCreateInstanceか?

4

3 に答える 3

3

CodeGuruCodeProjectの例には、純粋なCで実装されたWebブラウザーコントロールをホストするための最も簡単な実装が含まれています。独自の実装が必要ですが、実装IOleClientSiteが簡単なクラスの1つです。はい、 Webブラウザコントロールのインスタンスを呼び出すCoCreateInstanceか作成する必要があります。OleCreate

http://www.codeguru.com/cpp/in/ieprogram/article.php/c4379/Display-a-Web-Page-in-a-Plain-C-Win32-Application.htm

http://www.codeproject.com/Articles/3365/Embed-an-HTML-control-in-your-own-window-using-pla

于 2012-09-29T22:15:36.317 に答える
0

WTL(MSのヘッダーのみのライブラリ)を試してください。プロジェクトテンプレートをインストールします。テンプレートから新しいWTLプロジェクトを作成し、「Webブラウザ」制御オプション(または名前は何でも)を選択します。これで、生成されたソースを調査したり、(私の個人的な推奨事項)自分のものをこのプロジェクトに移動したりできます

于 2012-09-28T23:01:52.883 に答える
-3

あなたが何をしようとしているのか正確にはわかりません...

...しかし、可能であれば、単純なShellExecute()を使用することから始めます。

于 2012-09-28T22:08:51.793 に答える