繁体   English   中英

从C ++ dll中创建绘图画布的最简单方法?

[英]Easiest way to create a drawing canvas from within a C++ dll?

这种情况是这样的:有一个程序可以加载我的.dll / .so并从其中调用一个函数,可能多次,每次都需要不同的状态指针。 稍后在对dll的其他调用中使用不同的状态。 (如果需要上下文,这是游戏AI;每个状态都是AI玩家。)

我想要的是一种跨平台的方法,可以为每个状态(用于可视化,调试等)创建一个画布窗口。​​我尝试了wx,但是将其搁置了,因为这似乎并不容易。 是否有任何精巧的小型库可以做到这一点,或者我应该只使用WinAPI / X ...?

编辑:假设我无法修改主机程序。

根据我的经验, Qt的安装和驱动比Wx更简单。 它也是非常跨平台的。

如果要从DLL函数内部渲染某些图形而不传递任何指向QImage或QWidget类型的东西的指针,则可能要做的就是使用OpenGL。 您的DLL应该只渲染到当前的OpenGL上下文,它是全局状态,可以在DLL外部进行设置(也许使用QGLWidget)。

更新:啊,我只是注意到您的编辑无法修改主机代码。 这是一个问题:您创建的任何窗口确实都需要插入主机应用程序的事件循环中才能正常工作(例如,在公开/调整大小时收到WM_PAINT)。 在Win32中,任何旧代码(例如,您的库)肯定有可能仅是CreateWindow并在有机会的情况下使用GDI绘制其内容,但是一般的窗口行为可能会被破坏(对于Vista的双重缓冲可能根本无法工作;我没有尝试)。 在这种情况下,我通常最容易想到的就是简单地转储图像文件,然后再使用所选的图像查看器进行查看。 恕我直言,这实际上比“实时”窗口对调试更有用,因为您可以前后移动,放大,应用图像增强功能以​​突出显示各种问题,与以前的运行进行比较以进行回归测试等。(如果您确实想要“实时”视图,编写一个图像显示器来监视目录中的新图像,或通过命名管道或其他内容将其流式传输)。

如果您只需要简单的图形,没有窗口小部件,则SDL易于使用。 如果您确实需要复杂的控件,请使用timday所说的Qt。

您可以签出IUP 它与Lua的接口确实很好,并且可以从那里的扩展DLL中完全使用,因此似乎可以从插入其他东西的DLL中使用其C API。

IUP将为您提供一个框架,用于打开一个窗口,其中包含常用的可疑控件类型,包括画布。 其相关的库CD将为您提供该画布中的常规绘制操作。

当前版本可在Windows和* nix之间移植。 下一个主要版本也将支持MacOSX。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM