Announcement

Collapse
No announcement yet.

Grafische Oberflächen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Grafische Oberflächen

    Hi,
    ich habe mir vor etwa einem Monat das Buch "Spieleprogrammierung mit DirectX und C++" von Ulrich Kaiser und Philipp Lensing gekauft und habe trotz meiner geringen C++-Kenntnisse das relativ gut nachvollziehen können. Ich habe es mir geholt, da ich, wie man sich denken kann, ein Spiel programmieren möchte, um meine Karriere als Spiele-Programmierer ins rollen zu bringen. Im Buch wurde das ganze mit Visual Studio 2003/2005 entwickelt. Leider sind solche Entwicklungsumgebungen auf legalem Wege nicht kostenlos runterzuladen. Ich entschied mich für Visual C++ 2008 Express Edition, doch musste ich feststellen, dass diese keine Bearbeitung von Ressorcen zulässt. ResourceBuilder hat da auch nicht weitergeholfen.

    Ich habe zwar ein Fenster (als Ressource aus dem Buch), aber ich möchte noch einen Dialog (als ToolBox) erstellen, in dem man eine Auswahlliste hat, wenn möglich unterteilt in Kategorien. Das Abfragen der einzelnen Elemente (welche Auswahl wurde getroffen) ist, denke ich, weniger das Problem. Jedoch sollte dieser Dialog nicht als Ressource vorliegen, sondern direkt im Hauptprogramm implementiert werden. Jedoch weiß ich nicht, welche Befehle/Funktionen dafür notwendig sind. Ich hatte mir zumindest schonmal gedacht, dieses in eine Klasse zu packen (ka, ob das sinnvoll ist). Der Dialog soll dann natürlich als ParentWindow das Hauptfenster haben.

    Ich bräuchte dringend Hilfe, damit ich am eigentlichen Spiel weiterarbeiten kann! Bitte, wer kann mir helfen?!

  • #2
    Jedoch sollte dieser Dialog nicht als Ressource vorliegen, sondern direkt im Hauptprogramm implementiert werden.
    Das ist unverständlich.

    *.rc Datei wird zu einer compilierten *.res Resourcendatei wird in die EXE compiliert. In modernen Umgebungen müssen diese Dateien direkt nicht vorliegen, da die Frameworks sie "onthefly" erzeugen und in die EXE packen. In der EXE sellbst werden es wohl immer Resourcen sein
    Christian

    Comment


    • #3
      mein problem ist ja, dass ich keinen ressourcen-editor habe (abgesehen von einem shareware-programm, mit dem ich nicht umzugehen weiß). im standard visual studio z.B. existiert ja eine solche Möglichkeit und nachdem man sein gewünschtes Fenster zusammengebastelt hat, erzeugt visual studio automatisch die nötigen Dateien. Die Fenster und Buttons müssen im grunde genommen ja auch auf programmcode aufgebaut sein und genau das ist es, was ich suche.

      Comment


      • #4
        Die Fenster und Buttons müssen im grunde genommen ja auch auf programmcode aufgebaut sein
        Nein, sind sie nicht

        Beispiel

        DLGTEMPLATE DIALOG 0, 0, 316, 76
        STYLE 0x404L | WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS
        FONT 8, "MS Sans Serif"
        LANGUAGE LANG_NEUTRAL , SUBLANG_NEUTRAL
        {
        LTEXT "", 1119, 0, 0, 204, 76, SS_LEFT | WS_CHILD | NOT WS_VISIBLE | WS_GROUP
        }
        TEXTFILEDLG DIALOG 0, 0, 316, 76
        STYLE 0x404L | WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS
        FONT 8, "MS Sans Serif"
        LANGUAGE LANG_NEUTRAL , SUBLANG_NEUTRAL
        {
        LTEXT "", 1119, 0, 0, 316, 55, SS_LEFT | WS_CHILD | NOT WS_VISIBLE | WS_GROUP
        }
        PREVIEWGLYPH BITMAP
        {
        '42 4D F6 00 00 00 00 00 00 00 76 00 00 00 28 00'
        '00 00 10 00 00 00 10 00 00 00 01 00 04 00 00 00'
        '00 00 80 00 00 00 00 00 00 00 00 00 00 00 00 00'
        '00 00 00 00 00 00 00 00 00 00 00 00 80 00 00 80'
        '00 00 00 80 80 00 80 00 00 00 80 00 80 00 80 80'
        '00 00 80 80 80 00 C0 C0 C0 00 00 00 FF 00 00 FF'
        '00 00 00 FF FF 00 FF 00 00 00 FF 00 FF 00 FF FF'
        '00 00 FF FF FF 00 33 33 33 33 33 33 33 33 00 00'
        '00 00 00 00 33 00 0F FF FF FF FF F0 30 00 0F FF'
        'FF FF 00 00 00 03 0F FF FF F0 78 87 00 33 0F FF'
        'FF 07 88 E7 F0 33 0F FF FF 08 88 87 80 33 0F FF'
        'FF 08 E8 87 80 33 0F FF FF 07 EE 87 F0 33 0F FF'
        'FF F0 78 87 03 33 0F FF FF FF 00 00 33 33 0F FF'
        'FF FF FF F0 33 33 0F FF FF FF 00 00 33 33 0F FF'
        'FF FF 08 03 33 33 0F FF FF FF 00 33 33 33 00 00'
        '00 00 03 33 33 33'
        }
        Christian

        Comment


        • #5
          Soweit ich das verstehe ist das ein Dialog mit diversen Eigenschaften (WS_CHILD | ... ) und einer Bitmap. Das ist aber auch egal. Mein Problem ist damit ja immer noch nicht behoben. Fangen wir mal ganz einfach an:

          Stell dir vor, Du hast Visual C++ 2008 Express Edition und willst ein leeres Fenster mit zwei Menüpunkten (Spiel und Einstellungen) und den Unterpunkten (Spiel->Beenden und Einstellungen->Optionen) erstellen. Bei Spiel->Beenden wird das Fenster geschlossen und bei Einstellungen->Optionen erscheint ein Dialog, mit einer Auswahlliste (Beschreibung folgt weiter unten). Bedenke, Du hast keinen integrierten Ressourcen-Editor!

          Zur Auswahlliste:

          ---------------------
          | + Kategorie1 |
          | + Kategorie2 | => - Kategorie2
          | | |
          | | |--- Auswahl1
          | | |--- Auswahl2
          | | |--- usw.
          | |
          ---------------------

          Also im Endeffekt eine Baumliste. Ich möchte nur wissen, wie das geht, mit Code und Beschreibung, wie man dabei vorgeht. Ich wäre Dir sehr dankbar, wenn Du das machen würdest, Christian.

          Comment


          • #6
            Ich habe mich mal an ResourceBuilder versucht und konnte mit ein bisschen Mühe eine Ressource erstellen. Sie kommt dem oben genannten Beispiel nahe. Ich habe sie in den Projektordner reinkopiert und habe in der WinMain-Funktion die entsprechenden Bezeichner gewählt. Jedoch erscheint immer der Fehler:

            "...\gui.cpp(38) : error C2440: '=': 'const char [7]' kann nicht in 'LPCWSTR' konvertiert werden
            Die Typen, auf die verwiesen wird, sind nicht verknüpft; die Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat."

            Dabei handelt es sich um folgende Passage:
            Code:
            int APIENTRY WinMain(HINSTANCE hInst, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
            	{
            	MSG msg;
                    HACCEL acc;
            	WNDCLASSEX wcx;
            
            	gui_instance = hInst;
            
            	wcx.cbSize = sizeof( wcx); 
            	wcx.lpszClassName	= "Window";    // Hier wird der Fehler verursacht!
            	wcx.lpfnWndProc = gui_windowhandler;
            	wcx.style	= CS_VREDRAW | CS_HREDRAW;
            	wcx.hInstance	= hInst;
            	wcx.hIcon	 = LoadIcon(hInst, MAKEINTRESOURCE( IDI_F_STYLE));	// F-Style ist das Icon
            	wcx.hIconSm = LoadIcon(hInst, MAKEINTRESOURCE( IDI_F_STYLE));
            	wcx.hCursor = LoadCursor(NULL, IDC_ARROW);
            	wcx.hbrBackground	= (HBRUSH)(COLOR_WINDOW+1);
            	wcx.lpszMenuName	= MAKEINTRESOURCE( IDR_MENU);
            	wcx.cbClsExtra	= 0;
            	wcx.cbWndExtra = 0;
                    // [...]
                    }
            Ich habe schon versucht es in den entsprechenden Typ umzuwandeln, doch dann tauchen neue Fehlermeldungen auf. Ich habe es auch schon auskommentiert, aber dann verweist der Compiler auf ein zu frühes Ende in der Header-Datei, die nur aus #define-Zeilen besteht.

            Comment


            • #7
              IDI_F_STYLE muss wenn ich mich recht erinnere ein define mit einem int-Wert sein.

              Habe hier noch einen 1000 Seiten Wälzer in dem das alles drin steht...
              Christian

              Comment


              • #8
                Ja, das ist richtig, es steht stellvertretend für das Icon. Daran liegt es aber nicht. Es hat wie schon gesagt etwas mit "wcx.lpszClassName = "Window";" zu tun, denn die Fehlermeldung verweist auf diese Zeile.

                Comment


                • #9
                  wcx.lpszClassName = PROGRAMM;

                  oder

                  const char g_szClassName[] = "myWindowClass";

                  wcx.lpszClassName = g_szClassName;
                  Christian

                  Comment


                  • #10
                    Originally posted by Vergil17 View Post
                    Im Buch wurde das ganze mit Visual Studio 2003/2005 entwickelt. Leider sind solche Entwicklungsumgebungen auf legalem Wege nicht kostenlos runterzuladen. Ich entschied mich für Visual C++ 2008 Express Edition, doch musste ich feststellen, dass diese keine Bearbeitung von Ressorcen zulässt. ResourceBuilder hat da auch nicht weitergeholfen.
                    Auch auf die Gefahr hin etwas falsches zu sagen.. Ich bin der Meinung, so lange man mit den Programmen keine kommerziellen Projekte entwickelt, sondern sie zum Üben braucht, sollten diese zumindest extrem günstig, wenn nicht kostenlos sein.

                    Ich habe mir noch jedes Program aus dem T* Netz gezogen welches ich brauchte! Solltest du irgendwann einmal professionell davon gebrauch machen, ist die legale Finanzierung deren eh nur noch Formsache..

                    Comment


                    • #11
                      Auch auf die Gefahr hin etwas falsches zu sagen.. Ich bin der Meinung, so lange man mit den Programmen keine kommerziellen Projekte entwickelt, sondern sie zum Üben braucht, sollten diese zumindest extrem günstig, wenn nicht kostenlos sein.
                      Üblicherweise ist das nicht die Politik der Lizenzgeber. Vielmehr gibt es Vollversionen und eben im Funktionsumfang begrenzte Versionen. Obman das als Einzelner gutheisst ist dabei wenige vob belang (leider).

                      Woher man illegale Programme beziehen kann, ist nicht Gegenstand dieser Website
                      Christian

                      Comment

                      Working...
                      X