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

时间:2009-04-10 16:25:53

标签: c++ user-interface dll

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

我想要的是为每个状态创建画布窗口的跨平台方式(用于可视化,调试等)我试过wx,但是把它搁置,因为它看起来并不容易一点都不是否有任何整齐和小型的库可以做到这一点,或者我应该使用WinAPI / X ......?

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

3 个答案:

答案 0 :(得分:1)

根据我的经验,

Qt设置和驱动比Wx更简单。这也是非常跨平台的。

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

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

答案 1 :(得分:0)

如果你只想要简单的图形,没有小部件,SDL非常容易使用。如果你确实需要复杂的控制,请使用Qt,正如timday所说。

答案 2 :(得分:0)

您可以查看IUP。它与Lua的连接非常好,并且可以完全从扩展DLL中使用,所以看起来似乎可以从插入其他东西的DLL中使用它的C API。

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

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