我想在其他演示技术(Direct3D和WPF)中呈现第三方ActiveX控件。为此,我需要ActiveX渲染到系统内存位图而不是屏幕。我知道有办法做到这一点,但不知道从哪里开始。我不怕做任何本地方法挂钩,但我不知道从哪里开始。我以为BeginPaint(...)可能是热门票......
有没有人这样做或看过漂浮的示例/样本?
BTW,我不想做WM_PRINT类型的解决方案。我宁愿这个代码是反应性的,而不是主动的,并强迫hwnd重新绘制。
编辑:
在我的案例中,两个答案都是正确的,所以我给每个答案+1。我希望有一个更低级别的解决方案更灵活,但目前这已经足够好了。
答案 0 :(得分:3)
最好的办法是查看ActiveX对象是否支持IViewObject并调用Draw()方法将其渲染到DC中。
如果对象不支持标准的OLE接口,那么这将很难让它工作。你不得不求助于做一些邪恶的事情,比如重写DLL的导入表来重定向BitBlt()等等。我做过这样的事情。我不推荐它。
您的下一个问题是如何正确映射输入事件。
答案 1 :(得分:1)
您的网站是否支持IOleInPlaceSiteWindowless界面?
不幸的是,ActiveX控件中的无窗口支持是可选的。如果第三方接口支持它,那么您可以使用IViewObject :: Draw将控件渲染到您想要的任何表面上。