Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » Neues Fenster öffnen mit Menü

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ]
000
23.09.2004, 15:44 Uhr
~Gast
Gast


Hallo,
ich versuche gerade ein Spiel zu programmieren, wo zuerst ein Start Fenster geöffnet wird, da kann man dann in der Menüleiste auf "Play Game" klicken und dann sollte sich das eigentliche Spielfenster öffnen...

Ich habe u.a. einmal die Klasse MyFrame.ccp wo die passende Methode zum Menüeintrag steht:


Code:

void MyFrame::OnPlay( wxCommandEvent & event )
{
//Hier müsste dann was stehen, damit das neue Fenster geöffnet wird
}




Und dann habe ich eine Klasse MyApp.cpp wo bisher folgende Methode zum Erzeugen der beiden Fenster drin steht:



Code:

bool MyApp::OnInit( void )
{
        wxFrame *frame = new MyFrame( "Menü" , wxPoint( 50 , 50 ), wxSize( 500 , 400 ) );
        
        wxFrame *frame2 = new PlayFrame( "THE GAME!" , wxPoint( 50 , 50 ), wxSize( 960 , 730 ) );
              
        frame->Show( TRUE );        
        frame2->Show( TRUE );
        SetTopWindow( frame );
        return TRUE;
}




So werden jetzt natürlich beide Fenster zwar einwandfrei erzeugt, aber auch gleichzeitig von Anfang an geöffnet, wenn ich die .exe Datei öffne, die am Ende heruaskommt nachdem ich compiliert habe... Wie kann ich es hinbekommen, dass das neue PlayFrame Fenster auch wirklich erst dann geöffnet wird, wenn der Menüeintrag angeklickt wird?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
23.09.2004, 15:49 Uhr
(un)wissender
Niveauwart


Meinst du das ernst?
frame2->Show( TRUE ); erst in OnPlay aufrufen, ev. auch das Fenster dort erst erzeugen.
--
Wer früher stirbt ist länger tot.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
23.09.2004, 18:01 Uhr
~Gast
Gast


Entschuldigung, es kann ja nicht jeder alles wissen, ich bin noch ein ziemlicher Anfänger auf dem Gebiet C++...

Das hatte ich auch schon versucht, nur wenn ichs in die Methode OnPlay schreibe (das Fenster dort erzeuge und danach sichtbar machen wil), dann bekomm ich beim Compilieren die Fehlermeldung

In member function 'void MyFrame::OnPlay(wxCommandEvent&':
parse error before '(' token

Klammern und Zeichen stimmen alle, daran kanns nicht liegen...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
23.09.2004, 21:36 Uhr
(un)wissender
Niveauwart


Hm, scheint so als hättest du mit sehr fundamentalen Problemen zu kämpfen. Lerne erstmal C++, dann mach wxWidgets-Kram.
In OnPlay muss natürlich frame2 bekannt sein...
Wenn du mehr Code zeigst kann ich dir helfen.
--
Wer früher stirbt ist länger tot.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
24.09.2004, 12:26 Uhr
~Gast
Gast


In myframe.cpp steht nun zusammengefasst folgendes:

Code:

...
#include "myframe.h"
...
BEGIN_EVENT_TABLE( MyFrame , wxFrame )
   ...
   EVT_MENU( MyFrame_Play , MyFrame::OnPlay )
   ...  
END_EVENT_TABLE()
...
MyFrame::MyFrame( const wxString & title ,
                  const wxPoint & pos ,
                  const wxSize & size )
        :wxFrame( (wxFrame*)NULL , -1 , title , pos , size )
      
{
       ...
       wxMenuBar * menuBar = new wxMenuBar();  
        
        wxMenu *menuFile = new wxMenu();
        
       menuFile->Append( MyFrame_Play , "&Start Game" , "Neues Spiel" );
        
        menuBar->Append( menuFile , "&Datei" );    
    
        SetMenuBar( menuBar );    
        ...  
        
}
...
void MyFrame::OnPlay(wxCommandEvent & event)
{
     wxFrame *frame2 = new PlayFrame( "THE GAME!" , wxPoint( 50 , 10 ), wxSize( 960 , 730 ) );
     frame2->Show( TRUE );
}
...



In der Header Datei myframe.h habe ich stehen:

Code:

class MyFrame: public wxFrame
{
        private:
      
        DECLARE_EVENT_TABLE()
        
        protected:
       ...      
       wxFrame *frame2;        
                
        public:        
        MyFrame( const wxString & title , const wxPoint & pos , const wxSize & size );
        ...
        void OnPlay( wxCommandEvent & event);
        ...
};



Dann habe ich noch die Datein myapp.cpp:

Code:

#include "myapp.h"
#include "myframe.h"
#include "playframe.h"

bool MyApp::OnInit( void )
{
        wxFrame *frame = new MyFrame( "Menü!" , wxPoint( 50 , 50 ), wxSize( 500 , 400 ) );        
        
         frame->Show( TRUE );        
        
        SetTopWindow( frame );
        return TRUE;
}



und myapp.h:

Code:


class MyApp : public wxApp
{
        public:
        virtual bool OnInit();  
};




Das Erzeugen der Fenster in myapp.cpp klappt, er zeigt jetzt nur diesen Fehler in der OnPlay Methode in myframe.cpp an...

Das ganze soll ein Uni-Projekt werden und eigentlich dachte ich auch, ich hätte C++ im Groben und Ganzen verstanden, denn bis auf diese eine Sache funktioniert eigentlich alles, vermutlich ist es einfach ein total dummer Fehler und ich steh grade voll aufm Schlauch ...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
24.09.2004, 13:53 Uhr
(un)wissender
Niveauwart



C++:
wxFrame *frame2 = new PlayFrame( "THE GAME!" , wxPoint( 50 , 10 ), wxSize( 960 , 730 ) );


soll wohl heißen

C++:
wxFrame *frame2 = new MyFrame( "THE GAME!" , wxPoint( 50 , 10 ), wxSize( 960 , 730 ) );


ganz korrekt wäre

C++:
wxFrame *frame2 = new MyFrame( wxT("THE GAME!") , wxPoint( 50 , 10 ), wxSize( 960 , 730 ) );



Du mußt (vermutlich) auch noch irgendwie dafür sorgen, dass für diese Fenster mal Destroy aufgerufen wird.
--
Wer früher stirbt ist länger tot.

Dieser Post wurde am 24.09.2004 um 13:55 Uhr von (un)wissender editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
24.09.2004, 14:35 Uhr
~Gast
Gast


Die Klasse myframe beinhaltet ja das eigentliche Menüfenster, wo man dann im Menü auswählen kann, was gemacht werden soll (Spiel in neuem Fenster starten, Regeln in neuem Fenster anzeigen etc.). Das wird in myapp erzeugt... Es gibt dann aber noch die Klasse PlayFrame, die beinhaltet das eigentliche Spielfenster... Also muss ich doch dann aber ein PlayFrame Fenster erzeugen in der Methode OnPlay, oder? Es sollte ja so sein, dass ich ein fenster mit Menü habe, da klicke ich dann im Menü auf Start und daraufhin öffnet sich ein neues Fenster, das dann das eigentliche Spielfenster ist...

Ja, stimmt, nen Destruktor kommt natürlich auch noch mit rein...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
24.09.2004, 14:42 Uhr
(un)wissender
Niveauwart


Nee, kein destuktor (oder zumindest nicht um damit das Fenter explizit zu zerstören)!
Man muss frame->destroy() aufrufen, schau mal in die Doku.

Dann fehlt vermutlich noch ein #include "playframe.h", PlayFrame ist bisher unbekannt.
--
Wer früher stirbt ist länger tot.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
24.09.2004, 14:43 Uhr
~Gast
Gast


Ok, großes SORRY für die Verwirrung!! Ich bin auch zu dämlich, ich hatte einfach nur vergessen in myframe.cpp die Header-Datei von playframe zu inkludieren *Schandeübermich* !

Aber trotzdem danke für die Mühe !! Ohne den Tipp mit dem MyFrame statt PlayFrame hätt ich vermutlich noch ewig gesucht ...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
24.09.2004, 14:45 Uhr
~Gast
Gast


Alles klar, großes DANKE nochmal;-)!!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ C / C++ (WinAPI, Konsole) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: