S
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
}