使用MFC的跨进程GDI绘图
Cross process GDI Drawing using MFC
我有一个巨大的MFC MDI应用程序,它使用设备上下文绘制其可滚动视图区域。这个应用程序使用第三方库在相同的视图区域做一些额外的绘图。它的工作原理是通过将视图区域的DC(设备上下文)传递给这个第三方库(dll),然后dll做额外的绘图,这是相当复杂的。
然而,我们正在将整个应用程序转换为64位,问题是我们没有这个第三方库的64位版本。这让我们只有一个选择,那就是把这个第三方库移动到一个单独的进程中,然后在我们的主应用程序和托管这个第三方库的新进程之间进行进程外调用。
但是现在,我们如何进行跨流程绘图呢?是否有任何方法可以使用普通的GDI或MFC来做这些事情?
这个答案说你不能把HDC
从一个进程传递到另一个进程。
你可以这样做:
- 在DC上发布
GetDIBits
以获得原始位图位。 - 通过使用某种形式的IPC将这些移动到32位进程。
- 使用
SetDIBits
将它们放入另一个进程的内存DC中。 - 允许第三方库与DC进行交互。
- 做同样的反向操作以获得比特。
对于IPC,我建议简单地将一块共享内存映射到两个进程中。性能可能会很差,但你应该能应付过去。
我相信Google Chrome做了类似的事情,将渲染引擎与单个选项卡隔离开来。
相关文章:
- 使用 GDI+ 旋转位图,然后转换为 HDC
- 没有专用显卡的 Direct2D 与 GDI+
- GDI 绘制到外部窗口 (C++)
- GTKMM:拍摄绘图区域的屏幕截图?
- GTKMM:如何将键盘事件附加到绘图区域?
- C++ WinAPI[GDI].自定义 gui 正确重绘
- C++ Gdi+将图像转换为灰度
- C++GDI+ 选择调色板
- 如何从内存中分配GDI+ POINT类地址?
- OpenGL:使用实例化绘图与我正在绘制的帧缓冲进行绘制
- GDI+-无法对Gdiplus::Graphics(C++)执行任何操作
- 为什么在我释放左键单击后,我的绘图会消失
- C++gdi::内存中的位图到PNG图像
- GDI+ flickering
- 如何防止opengl绘图拉伸到窗口大小?
- QT 无法通过上下文菜单添加新绘图 (QCustomPlot)
- 结合blits和gdi绘图(不起作用,blins)
- 使用gdi的免费绘图-alpha颜色问题
- GDI+多线程绘图
- 使用MFC的跨进程GDI绘图