2009-04-10 51 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。

相關問題