Probleme bei der Darstellung meines Programms mit wxWidgets



  • Ich habe drei Probleme bei der Darstellung meines Anwendungsprogramms. Das erste Problem ist, dass mein Icon in der Fenster- und Kontrollleiste nur angezeigt wird, wenn ich das Programm von der Shell-Konsole aus starte. Das zweite Problem ist das neu zeichnen in den Panel. Das letzte Problem ist, dass ich nicht weis, wie die Fenstergröße manuell eingestellt wird. Ich habe alle Probleme in meinen Quelltext mit TODO gekennzeichnet. Vielleicht kann mir jemand verraten, wo mein Fehler liegt.

    Danke euch schon mal in voraus!

    Gruß,
    Stefan

    srbase.h

    ////////////////////////////////////////////////////////////////////////////////
    /// Die Headerdatei srBase
    ////////////////////////////////////////////////////////////////////////////////
    
    #ifndef _SRBASE_H_
    #define _SRBASE_H_
    
    #include <wx/wx.h>
    
    ////////////////////////////////////////////////////////////////////////////////
    /// Der srApp-Baustein
    ////////////////////////////////////////////////////////////////////////////////
    
    class srApp : public wxApp
    {
    	public:
    		virtual bool OnInit();
    };
    
    ////////////////////////////////////////////////////////////////////////////////
    /// Der srFrame-Baustein
    ////////////////////////////////////////////////////////////////////////////////
    
    class srFrame : public wxFrame
    {
    	private:
    		wxBoxSizer *srSizer;
    		wxPanel *srPanel;
    		wxTimer *srTimer;
    	protected:
    		//Versteckte Methode
    		void OnPaint(wxPaintEvent &event);
    		void OnPress(wxKeyEvent &event);
    		void OnSize(wxSizeEvent &event);
    		void OnTimer(wxTimerEvent &event);
    	public:
    		enum
    		{
    			srID_FRAME,
    			srID_PANEL,
    			srID_TIMER
    		}
    		wxWindowID;
    		srFrame(wxWindow *parent, const wxString &title = wxString("Mein Spiel"),
    		const wxPoint &pos = wxDefaultPosition, const wxSize &size = wxSize(800, 600),
    		long style = (wxCAPTION | wxCLOSE_BOX | wxMINIMIZE_BOX | wxTAB_TRAVERSAL));
    		~srFrame();
    };
    
    #endif
    

    srbase.cpp

    ////////////////////////////////////////////////////////////////////////////////
    /// Die wxWidgets-Schablone
    ////////////////////////////////////////////////////////////////////////////////
    
    #include "srbase.h"
    
    IMPLEMENT_APP(srApp)
    
    bool srApp::OnInit()
    {
    	srFrame *frame = new srFrame(NULL);
    	//TODO: Icon richtig anzeigen
    	frame->SetIcon(wxIcon(wxString("srbib.ico")));
    	frame->Show(TRUE);
    	this->SetTopWindow(frame);
    	return TRUE;
    }
    
    ////////////////////////////////////////////////////////////////////////////////
    /// Das Anwendungsprogramm
    ////////////////////////////////////////////////////////////////////////////////
    
    srFrame::srFrame(wxWindow *parent, const wxString &title, const wxPoint &pos, const wxSize &size, long style)
    : wxFrame(parent, srID_FRAME, title, pos, size, style)
    {
    	this->SetSizeHints(wxDefaultSize, wxDefaultSize);
    
    	srPanel = new wxPanel(this, srID_PANEL, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL);
    	srTimer = new wxTimer(this, srID_TIMER);
    	srSizer = new wxBoxSizer(wxVERTICAL);
    
    	srPanel->SetBackgroundColour(wxColour(0, 0, 0));
    	srPanel->SetFocus();
    	srSizer->Add(srPanel, 1, wxEXPAND, 5);
    	srTimer->Start(1000);
    
    	this->SetSizer(srSizer);
    	this->Layout();
    
    	srPanel->Connect(wxEVT_KEY_DOWN, wxKeyEventHandler(srFrame::OnPress), NULL, this);
    	srPanel->Connect(wxEVT_PAINT, wxPaintEventHandler(srFrame::OnPaint), NULL, this);
    	this->Connect(srID_TIMER, wxEVT_TIMER, wxTimerEventHandler(srFrame::OnTimer), NULL, this);
    }
    
    srFrame::~srFrame()
    {
    	srTimer->Stop();
    	srPanel->Disconnect(wxEVT_KEY_DOWN, wxKeyEventHandler(srFrame::OnPress), NULL, this);
    	srPanel->Disconnect(wxEVT_PAINT, wxPaintEventHandler(srFrame::OnPaint), NULL, this);
    	this->Disconnect(srID_TIMER, wxEVT_TIMER, wxTimerEventHandler(srFrame::OnTimer), NULL, this);
    }
    
    void srFrame::OnPaint(wxPaintEvent &event)
    {
    	wxSize framesize = this->GetSize();
    	wxPaintDC *paint = new wxPaintDC(srPanel);
    	paint->SetBackground(wxBrush(wxColour(0, 0, 0)));
    	paint->SetBrush(wxBrush(wxColour(128, 128, 128)));
    	paint->SetFont(wxFont(12, wxROMAN, wxNORMAL, wxNORMAL, FALSE, "DejaVu Sans"));
    	paint->SetTextForeground(wxColour(0, 0, 0));
    	paint->SetPen(wxPen(wxColour(128, 128, 128)));
    	paint->DrawRectangle(wxRect(0, (framesize.y - 26), framesize.x, 20));
    	paint->DrawText(wxString("A = Ansicht wechseln\tB = Beenden"), 4, (framesize.y - 24));
    	//Versteckter Aufruf einer Zeichen-Prozedur
    	delete paint;
    }
    
    //Versteckte Methode
    
    void srFrame::OnPress(wxKeyEvent &event)
    {
    	int keycode = event.GetKeyCode();
    	switch(keycode)
    	{
    		case 'A':
    			if(IsFullScreen())
    			{
    				//TODO: Fenstergroesse auf Normalgroesse setzen
    				this->SetSize(800, 600);
    				this->ShowFullScreen(FALSE);
    			}
    			else
    				this->ShowFullScreen(TRUE);
    			//TODO: Auf den Panel neu zeichnen
    			srPanel->Refresh();
    			break;
    		case 'B':
    			Close();
    			break;
    		default:
    			event.Skip();
    	}
    }
    
    void srFrame::OnTimer(wxTimerEvent &event)
    {
    	//Versteckter Code
    }
    

Anmelden zum Antworten