场景是这样的:有一个程序加载我的.dll/.so,并从其中调用一个函数,可能会多次,每次都需要一个不同的状态指针。它在以后对dll的其他调用中使用不同的状态。(如果您需要上下文,这是一个游戏AI;每个状态都是一个AI玩家。)
我想要的是一种跨平台的方式,为每个状态创建一个画布窗口(用于可视化、调试等)。我试过wx,但把它放在了一边,因为它看起来一点都不容易。有没有什么整洁小巧的库可以做到这一点,或者我应该直接使用WinAPI/X...?
编辑:假设我不能修改主机程序。
发布于 2009-04-10 20:33:59
根据我的经验,Qt的安装和驱动比Wx更简单。它也是非常跨平台的。
如果你想在不传递任何指向QImage或QWidget类型的东西的指针的情况下,从你的DLL函数内部渲染一些图形,可能要做的事情是使用OpenGL。您的动态链接库应该只呈现到当前的OpenGL上下文,这是全局状态,并且可以在动态链接库外部设置(可能使用QGLWidget)。
更新:啊,我刚刚注意到你的编辑不能修改主机代码。这是一个问题:你创建的任何窗口确实需要插入到主机应用程序的事件循环中才能正常工作(例如,当显示/调整大小时接收WM_PAINT )。当然,在win32中,任何旧代码(例如你的库)都有可能只使用CreateWindow,只要有机会就用GDI来绘制它的内容,但是一般的窗口行为可能会被打破(它可能根本不适用于Vista的双缓冲;我还没有尝试过)。在这种情况下,我通常发现最简单的是转储图像文件,然后使用所选的图像查看器进行查看。IMHO这实际上比“实时”窗口对调试更有用,因为你可以后退和前进,放大,应用图像增强来突出各种问题,比较以前运行的回归测试等。(如果你真的想要“实时”视图,编写一个图像显示器来监控目录中的新图像,或者通过命名管道或其他东西流式传输它们)。
发布于 2009-04-10 21:31:38
如果你只想要简单的图形,没有小工具,SDL是非常容易使用的。如果您确实需要复杂的控件,请使用Qt,正如timday所说的那样。
发布于 2009-04-28 08:25:25
你可以去IUP看看。它与Lua的接口非常好,并且可以完全从扩展DLL中使用,所以它的C API似乎可以从插入到其他东西中的DLL中使用。
IUP将为您提供一个框架,用于打开一个窗口,其中包含常见的可疑控件类型,包括画布。它的相关库CD将为您提供该画布中的常规绘图操作。
当前版本可在Windows和*nix之间移植。下一个主要版本也将支持MacOSX。
https://stackoverflow.com/questions/738156
复制相似问题