2009-04-10 11 views
1

Das Szenario ist so: Es gibt ein Programm, das lädt meine DLL/.so und ruft eine Funktion aus, möglicherweise mehrmals, jedes Mal erwartet einen anderen Zeiger auf den Zustand. Es verwendet die verschiedenen Zustände später bei anderen Aufrufen in die DLL. (Es ist ein Spiel AI, wenn Sie Kontext benötigen; jeder Staat ist ein AI-Player.)Einfachste Möglichkeit, eine Zeichenfläche aus einer C++ - DLL zu erstellen?

Was ich will ist eine plattformübergreifende Möglichkeit, ein Canvas-Fenster für jeden dieser Zustände zu erstellen (für die Visualisierung, Debugging usw.)) Ich habe versucht, wx, aber legen Sie es in die Warteschleife, da es überhaupt nicht einfach zu sein schien. Gibt es irgendwelche ordentlichen und kleinen Bibliotheken, die das können oder sollte ich einfach mit WinAPI/X ... gehen?

Edit: Angenommen, ich kann das Host-Programm nicht ändern.

Antwort

1

Qt ist einfacher zu installieren und zu fahren als Wx, meiner Erfahrung nach. Es ist auch sehr plattformübergreifend.

Wenn Sie einige Grafiken aus Ihrer DLL-Funktion rendern möchten, ohne irgendwelche Zeiger auf QImage oder QWidget einzutragen, sollten Sie OpenGL verwenden. Ihre DLL sollte nur auf den aktuellen OpenGL-Kontext rendern, der globaler Status ist und nur außerhalb der DLL (möglicherweise mit QGLWidget) eingerichtet werden kann.

Update: Ah, ich habe gerade bemerkt, dass Ihre Bearbeitung nicht in der Lage ist, den Host-Code zu ändern. Dies ist ein Problem: Jedes Fenster, das Sie erstellen, muss wirklich in die Ereignisschleife des Host-Apps eingesteckt werden, um ordnungsgemäß zu funktionieren (z. B. erhalten Sie WM_PAINT, wenn Sie es anzeigen oder in der Größe ändern). Es ist sicherlich in Win32 möglich, dass alter Code (zB Ihre Bibliothek) CreateWindow erstellt und seinen Inhalt mit GDI zeichnet, wann immer es möglich ist, aber das allgemeine Fensterverhalten ist möglicherweise ziemlich kaputt (es funktioniert möglicherweise überhaupt nicht mit der doppelten Pufferung von Vista; Ich habe es nicht versucht). Was ich in dieser Situation normalerweise am einfachsten finde, ist einfach, die Bilddateien auszugeben und anschließend mit einem Bildbetrachter Ihrer Wahl zu überprüfen. IMHO ist das eigentlich nützlicher für das Debuggen als ein "Live" -Fenster, weil man vorwärts und rückwärts gehen kann, hineinzoomen, Bildverbesserung anwenden kann, um verschiedene Probleme hervorzuheben, Vergleiche mit früheren Läufen für Regressionstests etc ... (Wenn du wirklich willst "Live" -Ansichten, schreibe eine Bildanzeige, die ein Verzeichnis auf neue Bilder überwacht oder sie durch eine benannte Pipe oder etwas streamt).

+0

hat ein Beispiel, wie man ein Fenster von innerhalb einer DLL ... macht? – Baczek

0

Wenn Sie nur einfache Grafiken, keine Widgets wollen, SDL ist sehr einfach zu bedienen. Wenn Sie komplexe Steuerelemente benötigen, verwenden Sie Qt, wie timday sagte.

+0

dachte nicht an SDL, werde es versuchen. – Baczek

0

Sie können IUP überprüfen. Es verbindet sich sehr gut mit Lua und kann vollständig von einer Erweiterungs-DLL dort verwendet werden, so dass es plausibel erscheint, dass seine C-API von einer DLL verwendet werden könnte, die an etwas anderes angeschlossen ist.

IUP wird Ihnen ein Framework zum Öffnen eines Fensters mit den üblichen verdächtigen Steuerelementen, einschließlich eines Canvas, zur Verfügung stellen. Die zugehörige Bibliothek CD bietet Ihnen die üblichen Zeichenoperationen in diesem Zeichenbereich.

Aktuelle Versionen sind zwischen Windows und * nix portierbar. Die nächste große Version wird auch MacOSX unterstützen.

Verwandte Themen