[Anfänger] SFML Window Tutorial - kein Fenster
-
Ich versuche gerade verzweifelt, http://www.sfml-dev.org/tutorials/1.6/window-window.php zum laufen zu bringen (Code 1zu1 kopiert aus Quelltextdatei kopiert). Es öffnet sich ein Konsolenfenster (welches aber nicht die richtigen Abmessungen hat, um dem Fenster zu entsprechen, das eigentlich erscheinen sollte. (und es hat nicht die richtige Beschriftung))
Ich nutze SFML 1.6 und VC2010 Express. Installation nach Tutorial auf der SFML-Homepage. Inc's in den INC, sämtliche lib's in den LIB-Ordner, dll's habe ich zusätzlich unter windows/system. Unter Projekteigenschaften/Linker/Eingabe sind die alle SFML lib's eingetragen (die nicht-dynamischen nicht-statischen, also z.B. sfml-system.lib; sfml-window.lib usw.)
Was könnte sonst noch falsch sein?Edit: Sowohl im Debug als auch im Release-Modus kein Fenster, obwohl inkludiert.
-
Hast du denn auch ein "Windows Application" Projekt angelegt (und dann anstatt WinMain direkt zu benutzen die SFML_Main Library hinzugelinkt)? s. "Preparing the code" - Letzter Satz...
-
Ich würde wenn schon SFML 2 verwenden. Ist zwar noch in Entwicklung und benötigt CMake, aber du hast folgende Vorteile:
- Wird im Gegensatz zu SFML 1.6 aktiv entwickelt
- Einige Bugfixes seit 1.6
- Viele neue Features
- Du musst später keinen Code auf Version 2 portieren
-
1.6 hat noch nen lästigen Bug der bei manchen ATI-Grafikkarten dazu führt, dass kein Fenster angezeigt wird. Das wird auch nicht mehr gefixed, da der Entwickler der Lib mit 2.0 beschäftigt ist (dort ist es gefixed).
Wie Nexus schon sagt: SFML2 verwenden.
-
OK.
Aber eigentlich will ich doch nur eins: einfache GUI-Programmierung!
Da hab ich also mein Visual C++ 2010 Express, einen schon zu 2% fertigen Quelltext für ein Text-RPG und klicke mir einfach mal 'ne hübsche Windows Forms Anwendung mit ein paar Buttons und einer ListBox zusammen. Ein komplettes RPG halt. Richtig geil, die Syntax quasi selbserklärend, den ganzen grafischen Kram kann man nach WYSIWYG machen. Sogar Hintergrundbilder für Buttons...
Als ich dann anfangen will, die Innereien zu programmieren, merke ich: Nichts geht mehr. Ich wollte schon einen dicken Thread aufmachen, da lese ich im letzten Moment http://www.c-plusplus.net/forum/263084. C++/CLI ist wohl was ganz anderes als dass, was ich bisher gelernt habe. Also hab ich mir dann die Visual Studio 2010 Test-Vollversion geladen und MFC ausprobiert, wie vorgeschlagen. Mit dem äußerst umfangreichen Assistenten eine MFC-Anwendung zusammengeklickt -> ich wurde erschlagen. Ich will doch nur ein Fenster mit 'nen paar (genau 10) Buttons und einer ListBox! Ein komplettes RPG halt. Und dieser MFC-Assistent möchte mich aber wohl gleich dazu drängen, Microsoft Office inkl. Datenbankanbindung zu nachzuprogrammieren. Naja, dann lese ich als nächstes von der WinAPI. Es gibt viele Tutorials, alle sehen gleich aus. Bei manchen steht dann sogar klein dabei: Achtung, C-Compiler verwenden. Als ich dass dann las, kompilierte dann endlich der Beispielquelltext ohne Fehler und Warnungen. Naja fast. Der einzige Beispielquelltext, der ohne Warnings durchlief, kam von http://de.wikipedia.org/wiki/Windows_Application_Programming_Interface#Programmbeispiel. Soviel dazu. Diese WinAPI kommt einem verdammt Aßbach vor. Und dann stehe ich nun da und will C++ - nicht C - programmieren. Geht zwar irgendwie...
Also weiter geschaut. SFML gefunden. Schneller Einstieg durch knappe Tutorials, die das wichtigste beschreiben (oder zumindest dass, was ich will). Wenn die Tutorials denn auch funktionieren würden... getan und gemacht, alle mögliche Libraries durchprobiert. Da muss man dann im Forum erfahren, dass das Ding nen Bug bei ATI-Karten hat. Mensch Mensch, da hab ich wohl Pech gehabt, bin einer der ganz wenigen mit ATI-Graka. Nun soll ich SFML2.0 nutzen. Mal sehen.
Vielleicht habe ich auch keine Lust mehr. Vielleicht bleibt mein achsotolles, zu 2% fertiges Text-RPG in der schicken weiß-auf-schwarz Konsole.Sehr lange Rede, kurzer Sinn: Gibt es nicht irgendwo GUI-Programmierung, die im Prinzip genauso einfach ist wie bei Windows Forms, nur OHNE CLI?
Verzeiht mir bitte meine Frustation.
Wer Ironie findet...EDIT: Der SFML2.0 Download (latest tarball) klappt auch nicht, DL bricht ab.
EDIT2: Danke, cooky. Ist "Neues Projekt" = "Visual C++ Win32-Projekt"? (damit auch JA nichts schief läuft...)
EDIT3: Und, damit wirklich nichts schief läuft: Das ist auch Express-Edition geeignet?
-
SFML ist AFAIK keine GUI-Bibliothek. Wenn du nur Windows unterstützen möchtest, ist das eh Quatsch.
Ein Tipp:
- Erstelle ein neues leeres Projekt.
- Erstelle eine neue Headerdatei "resource.h"
- Erstelle eine neue Ressource "resource.rc"
- Erstelle eine neue Quellcodedatei "main.c"
(Gegebenenfalls hpp/cpp nehmen.)
Alles was sich geöffnet hat schließen, rechtsklick auf "resource.rc" und "code anzeigen.". Der fragt dich jetzt ob du das wirklich möchtest - ja, möchtest du.Dateiinhalte:
"resource.rc"// Kommentar #include <Windows.h> #include "resource.h" IDD_DIALOG_MAIN DIALOGEX 0, 0, 256, 128 // Fenstergröße STYLE DS_CENTER | WS_MINIMIZEBOX | WS_SYSMENU // MSDN CAPTION "Zerbrechlich. :)" FONT 8, DLG_FONT BEGIN LTEXT "Hallo!", -1, 5, 3, 100, 8 // Text, id (-1 weil wir das nicht brauchen), Position/Größe DEFPUSHBUTTON "Default Button", IDC_BUTTON_DEFAULT, 5, 12, 64, 15 PUSHBUTTON "Button1", IDC_BUTTON_HELLO, 5, 32, 64, 15 EDITTEXT IDC_EDIT_ARGS, 100, 32, 130, 14, ES_AUTOHSCROLL END
"resource.h"
#define DLG_FONT "courier new" #define IDD_DIALOG_MAIN 1001 #define IDC_BUTTON_DEFAULT 10011 #define IDC_BUTTON_HELLO 10012 #define IDC_EDIT_ARGS 10041
"main.c"
#include <Windows.h> #include "resource.h" BOOL WINAPI DlgProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { switch (msg) { case WM_INITDIALOG: SetDlgItemText(hwnd, IDC_EDIT_ARGS, "Wie geht's?"); MessageBox(0, "Fenster wird gerade erstellt!", "Titel", MB_OK); return 1; case WM_CLOSE: MessageBox(0, "Fenster wird jetzt geschlossen!", "Tschuess", MB_OK); EndDialog(hwnd, 0); return 1; case WM_COMMAND: switch (LOWORD(wParam)) { case IDC_BUTTON_DEFAULT: { char buf[0x100]; GetDlgItemText(hwnd, IDC_EDIT_ARGS, buf, sizeof(buf)); MessageBox(0, buf, "", MB_OK); } return 1; case IDC_BUTTON_HELLO: MessageBox(0, "Hallo, Welt!", "BLubb", MB_OK); return 1; } break; } return 0; } int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE unused1, LPSTR unused2, int unused3) { DialogBox(hInstance, MAKEINTRESOURCE(IDD_DIALOG_MAIN), 0, DlgProc); }
Falls du das nicht verstehst und keine Lust hast dich damit zu beschäftigen, schreibe mir einfach genau wie dein Fenster aussehen soll. (Wie viele Pixel groß, welche Schriftart, von wo bis wo (Pixelgenau) sollen Buttons laufen, von wo bis wo Edit-Felder etc. Ich bastel dir das dann, du musst nur noch deinen Code an von mir markierten Stellen einfügen.)
Edit:
Die Express Version sollte das können, ja. Nein, ich meine wirklich ein leeres Projekt, das solltest du eigentlich auswählen können. Falls du mehr Fragen hast kannst du auch einfach in's IRC irc.euirc.net #pretty kommen und mich anflüstern.)
-
Danke, das ist wirklich sehr nett cooky.
Leeres Projekt ist klar, aber ich war mir nicht 100% sicher, ob es ein leeres Win32-Projekt sein soll. Da jedoch ein leeres Win32-Konsolenprojekt die einzige Alternative wäre, ist der Groschen nun auch bei mir selbst gefallen
Heute Abend komme ich in keinen IRC mehr, ich muss schlafen. Morgen gehts früh los auf die Hamburger Filmfesttage
Ich gehe mal davon aus, du bist dort häufiger im IRC anzutreffen. Ich werde mal ab DI reinschauen.
-
Hallo thuering,
ok, wenn du wirklich nur normale Windows GUIs programmieren willst, dann ist SFML nicht so geeignet.
Eine Übersicht über C++ GUI-Frameworks gibt es in der "Andere GUIs" - FAQ: Alles zur GUI Programmierung in C und C++
Am häufigsten werden wohl Qt, wxWidgets und GTKmm verwendet.
Ich würde an deiner Stelle aber die Finger von der WinAPI lassen (denn das basiert eher auf C als auf C++).Und falls du doch bei "Windows Forms" bleiben möchtest (allein schon wegen dem Designer), dann benutze einfach "C#" als Sprache (diese ist an C++ angelehnt).
Natürlich benötigt man dazu dann das .NET-Framework (aber das sollte ja auf den meisten Windows-Systemen eh installiert sein - zumindestens die Versionen 2.0 und 3.0).
-
Th69 schrieb:
Ich würde an deiner Stelle aber die Finger von der WinAPI lassen (denn das basiert eher auf C als auf C++).
Ja, das ist natürlich sehr sinnvoll. Die ersten Dinge an die ich bei 6 Buttons und zwei Textboxen denke, sind externe Bibliotheken oder gleich eine neue Sprache.