(C ++) MessageBox für Linux wie in MS Windows

8

Ich muss eine einfache grafische Message Box für eine Linux (SDL) Anwendung ähnlich der Windows MessageBox in C ++ (gcc / g ++ 4.4.0) implementieren. Sie müssen lediglich eine Beschriftung, eine Nachricht und eine Schaltfläche OK oder Schließen anzeigen und zu der aufrufenden Funktion zurückkehren, wenn Sie auf diese Schaltfläche klicken.

SDL verwendet einfach X (11), um ein Fenster für (OpenGL) Rendering zu öffnen.

Ich habe einen ähnlichen Thread bezüglich einer GTK-Implementierung durchgesehen, aber diese Implementierung scheint nicht richtig zu funktionieren.

Ich habe auch die wxMessageBox-Funktion von wxWidgets ausprobiert, aber das Kompilieren der Header bewirkt, dass der Compiler Fehlermeldungen über Syntaxfehler in include / c ++ / 4.4.0 / bits / stl_algobase.h (gcc 4.4.0 32 Bit auf openSuSE 11.1 32) ausgibt Bits). Die Verwendung von wxWidgets bedeutet auch, eine Unmenge von Bibliotheken verknüpfen zu müssen, indem ich STL zu meiner App hinzufüge (die es sonst nicht benötigt) und wer weiß was sonst, also möchte ich keine wxWidgets verwenden.

X11 / Motiv (openmotif) hat, was ich brauche (XmCreate {Fehler | Warnung | InfoDialog), aber diese benötigen ein übergeordnetes Widget (zB Top-Level-Fenster), das ich nicht habe und einen NULL-Parameter für diese nicht akzeptiere .

Also bin ich jetzt ratlos. Gibt es einen einfachen Weg, um zu tun, was ich will? Oder zumindest halbwegs einfach / einfach / unkompliziert? Wenn ja, welcher (mit so vielen Details wie möglich) würde sehr geschätzt werden.

    
karx11erx 05.09.2009, 19:49
quelle

5 Antworten

4

In SDL2 können Sie nun Meldungsfelder anzeigen:

Ссылка

%Vor%

Ссылка

%Vor%     
scrawl 16.11.2013, 15:42
quelle
3

Ich persönlich benutze Qt4s QMessageBox .

Beispiel:

%Vor%     
OneOfOne 05.09.2009 19:55
quelle
2

Sieht so aus, als müssten Sie ein Top-Level X11 / Motif-Fenster erstellen. Hier ist ein Code, mit dem Sie beginnen können:

%Vor%

Dies wurde von hier kopiert, was Ihnen vielleicht weitere Hinweise geben könnte das.

    
Matthew Talbert 05.09.2009 20:11
quelle
2

Hier ist meine Lösung. Ich entschied mich für Motif (OpenMotif), da es vergleichsweise wenige zusätzliche Bibliotheken (Xm, Xt, X11) benötigt. Abhängig von der Größe der Nachricht öffnet meine Implementierung ein einfaches Meldungsfeld oder einen ausgefeilteren Dialog mit einem nicht editierbaren, scrollbaren Text (letzterer aus dem Motif-Programmierhandbuch entnommen und für meine Zwecke angepasst).

Include-Dateien und globale Daten:

%Vor%

Helferfunktion zum Bestimmen von Zeilen und max. Spalten einer Textnachricht:

%Vor%

Rückruffunktion für die Schließen-Schaltfläche des Nachrichtendialogs:

%Vor%

Erstellen Sie einen Dialog mit einem scrollbaren, nicht editierbaren Text-Widget und einer Schaltfläche zum Schließen. Entnommen aus dem Motif-Handbuch und leicht angepasst (kein Icon, einzelne Taste), minimale Fensterdekoration).

%Vor%

Rückruffunktion für das Meldungsfeld 'OK-Taste

%Vor%

Entscheiden Sie, ob Sie das einfache oder das erweiterte Meldungsfeld verwenden, eines davon anzeigen und es entfernen möchten, wenn der Benutzer auf die Schaltfläche zum Schließen / OK klickt.

%Vor%     
karx11erx 08.09.2009 15:32
quelle
1

Ich würde vorschlagen, dass Sie in eine der GUI-Bibliotheken schauen, die SDL als Backend unterstützen. Eine solche Bibliothek wäre GG mit der Klasse ThreeButtonDlg . Wenn Run () zurückgegeben wird, können Sie sich das Ergebnis () ansehen. Siehe die Initial-Methode in ihrem minimalen Beispiel .

    
Martin v. Löwis 05.09.2009 20:24
quelle

Tags und Links