0

コントロールを表示せずに HTML を画像に変換する Win32 アプリケーションがあります。(Win32 アプリケーションで ActiveX を使用した経験はあまりありません)。

この MSDN の記事に従って、コントロールと呼び出しを作成しましたNavigate(): http://msdn.microsoft.com/en-us/library/aa451946.aspx

画像を変換する必要がある場合は、 を呼び出しますIViewObjec::Draw()。問題は、次の関数を呼び出しても、コントロールが常に表示されることです。

browser->put_Visible(VARIANT_FALSE); // browser is IWebBrowser2

コードに足を踏み入れたとき、私が呼び出すときに

mOleObject->DoVerb(OLEIVERB_INPLACEACTIVATE, NULL, mControlSite, 0, NULL, NULL)

コントロールはすぐに表示されます。しかし、MSDNからわかることは、それがOLEIVERB_INPLACEACTIVATE意味することです

メニューやツールバーなど、エンド ユーザーがオブジェクトの動作や外観を変更する必要があるツールを表示せずに、オブジェクトをその場でアクティブにします。このようなオブジェクトをシングルクリックすると、ユーザー インターフェイス ツールの表示がコンテナーとネゴシエートされます。コンテナが拒否した場合、オブジェクトはアクティブなままですが、ツールは表示されません。

少し混乱しています。隠したいだけです。

4

2 に答える 2

1

DoVerb()タイプのインスタンスIOleObject(あなたの場合は)を呼び出して、動詞としてmOleObject渡してみてください。OLEIVERB_HIDE

アップデート:

このIHTMLElementRender問題を解決するには、インターフェースの方が優れています ( HTML ドキュメントを画像としてキャプチャするを参照)。

于 2013-01-29T09:32:55.183 に答える
0

私は別の解決策を見つけました。

通常のウィンドウを作成し、htmlコントロールをwindownに配置して非表示にします。これにより、上記のすべての問題が解決されます。

ControlSiteで、IOleWindow :: GetWindow()を実装して、次のコードのように制御を配置し(mWindowは単なる基本ウィンドウクラスです)、この通常のウィンドウのハンドルを返すだけです。

HRESULT STDMETHODCALLTYPE GetWindow(/* [out] */ HWND __RPC_FAR* theWindow)
{   
    *theWindow = mWindow.GetHandle();
    return S_OK;    
}
于 2013-01-30T09:52:30.670 に答える