2009-04-10 127 views
1

这种情况是这样的:有一个程序加载我的.dll/.so并从中调用一个函数,可能多次,每次都需要一个不同的指针指向状态。它稍后在其他调用中使用不同的状态进入dll。 (这是一个游戏AI,如果你需要的上下文,每个状态是AI的球员。)从C++ dll内创建绘图画布的最简单方法是什么?

我要的是为每个国家的创建画布窗口(可视化,调试等的跨平台方式)我试过wx,但是暂时搁置了,因为它看起来并不容易。是否有任何整洁和小型的图书馆可以做到这一点,或者我应该使用WinAPI/X ...?

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

回答

1

Qt比我的经验更容易设置和驱动比Wx。它也是非常跨平台的。

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

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

+0

得到了一个例子如何从一个DLL里面创建一个窗口...? – Baczek 2009-04-10 21:00:20

0

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

+0

没有想到SDL,会试试看。 – Baczek 2009-04-10 22:25:53

0

您可能会收到IUP。它与Lua的接口非常好,并且完全可以从扩展DLL那里使用,所以看起来似乎有道理,它的C API可以从插入其他东西的DLL中使用。

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

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

相关问题