2009-10-18 56 views
1

我有一個第三方ActiveX控件,我想要在其他演示技術(Direct3D和WPF)中渲染。爲此,我需要將ActiveX渲染到系統內存位圖而不是屏幕。我知道有一種方法可以做到這一點,但不知道從哪裏開始。我不害怕做任何本地方法掛鉤,但我不知道從哪裏開始。我在想BeginPaint(...)可能是熱門票...將hwnd GDI調用重定向到系統內存位圖?

有沒有人做過這個或看過的例子/樣本漂浮?

順便說一句,我不想​​做一個WM_PRINT類型的解決方案。我寧願這個代碼是被動的,而不是主動的,並迫使HWWD重繪。

編輯:

兩個答案是正確的在我的情況,所以我給了每一個+1。我希望有一個更低層次的解決方案更靈活,但目前這已經足夠了。

回答

1

您的站點是否支持IOleInPlaceSiteWindowless界面?

不幸的是,ActiveX控件中的無窗口支持是可選的。如果第三方接口支持它,那麼您可以使用IViewObject :: Draw將控件渲染到任何你想要的表面上。

3

最好的辦法是看看ActiveX對象是否支持IViewObject並調用Draw()方法將它渲染到DC中。

如果該對象不支持標準的OLE接口,那麼您將很難使其工作。你將不得不採取行動,如重寫DLL的導入表來重定向BitBlt()等。我已經做了這樣的事情。我不推薦它。

您的下一個問題將是如何正確映射輸入事件。