我有一个第三方ActiveX控件,我想要在其他演示技术(Direct3D和WPF)中呈现。 为此,我需要将ActiveX渲染到系统内存位图而不是屏幕。 我知道有一种方法可以做到这一点,但不知道从哪里开始。 我不害怕做任何本地方法挂钩,但我不知道从哪里开始。 我在想BeginPaint(…)可能是热门票…
有没有人做过这个或看到漂浮的例子/样本?
顺便说一句,我不想做一个WM_PRINTtypes的解决scheme。 我宁愿这个代码是被动的,而不是主动的,迫使HWWD重绘。
编辑:
两个答案都是正确的,所以我给每个+1。 我希望有一个更低层次的解决scheme更灵活,但目前这已经足够了。
您的网站是否支持IOleInPlaceSiteWindowless界面?
不幸的是,ActiveX控件中的无窗口支持是可选的。 如果第三方接口不支持它,那么你可以使用IViewObject :: Draw渲染控件到你想要的任何表面上。
最好的办法是查看ActiveX对象是否支持IViewObject并调用Draw()方法将其渲染到DC中。
如果这个对象不支持标准的OLE接口,那么这个工作将会非常困难。 你将不得不采取行动,像重写DLL的导入表重定向BitBlt()等,我做了这样的事情。 我不推荐它。
您的下一个问题将是如何正确映射输入事件。