7

私の C++ アプリでは、Web ブラウザー (Internet Explorer) コントロール (CLSID_WebBrowser) を (COM 経由で) 埋め込んでいます。

IHTMLDocument2::write() メソッドを使用してそのコントロールに独自の html を表示できますが、html に<img src="foo.png">要素がある場合は表示されません。

何らかの方法で foo.png のデータを Web コントロールに提供する方法があると思いますが、この機能をフックする適切な場所が見つかりませんか?

foo.png のコンテンツを提供することを完全に制御する必要があるため、res:// プロトコルを使用するか、ディスクに保存して file:// プロトコルを使用するなどの回避策は十分ではありません。<img src="foo.png">埋め込まれた CLSID_WebBrowser コントロールがIHTMLDocument2::write() で指定された html データを参照すると、このデータを提供するように求められるように、何らかの形でコードをプラグインしたいだけです。

4

3 に答える 3

5

私自身の質問に答えるために、最終的に私のために働いた解決策は次のとおりです。

  1. IInternetSession :: RegisterNameSpace()に指定されたカスタムIClassFactoryを介して、カスタムIInternetProtocol /IInternetProtocolInfo/を登録します。私にはバグのように思われる理由で、それはIEにすでに知られているプロトコルである必要があります(私は「その」を選択しました)。

  2. IPersistentMoniker :: Load()を介してカスタムIMonikerを介してhtmlデータをフィードし、IMoniker :: GetDisplayName()(提供されたhtmlの相対リンクが解決されるベースURL)がそのプロトコルスキーム(私の場合)で始まることを確認します"これは://")。そうすれば、htmlデータの相対リンク "foo.png"はIEへのits://foo.pngになり、URLmonはIInternetProtocol :: Start()とIInternetProtocol :: Read()を呼び出して、そのURLのデータを要求します。 。

これはすべてかなり複雑です。実際の(BSDライセンスの)コードは次の場所で確認できます: http ://code.google.com/p/sumatrapdf/source/browse/trunk/src/utils/HtmlWindow.cpp

于 2011-11-30T11:46:11.060 に答える
0

mongoose などの小さな Web サーバーを埋め込み、そこからそれらのイメージを参照できます。

マングースでは、コールバックを特定のパスにアタッチして、C++ コードから画像を返すことができます。

これをデバッグ ツールに使用し、Web インターフェイスから各画像にアクセスできます。

于 2011-11-25T08:16:22.273 に答える
0

最も簡単な解決策はData URIです。で画像を直接インライン化しIHTMLDocument2::write()ます。

于 2011-11-25T09:54:36.970 に答える