wxWidgets Problem unbekannter Fehler
-
also das ist mein 1. Beitrag in diesem Forum und ich hoffe, dass ich hier noch öffter vorbeischauen werde.
Mein Problem ist folgendes:
Ich hab begonnen ein Programm zu schreiben (mit wxDev-C++), dass auch perfekt compiliert wird. Beim ausführen kommt aber die Vista-Fehlermeldung:
"Im Programm... ist ein Fehler aufgetreten. Es wird nach Lösungen gesucht"(oder so was ähnliches...).
Hier der Code://main.cpp #include <wx/wx.h> #include <windows.h> #include "main.h" IMPLEMENT_APP(Pizzavorschau) bool Pizzavorschau::OnInit() { BasicFrame *frame = new BasicFrame( wxT("Pizzavorschau"), 50, 50, 700, 500); frame->Show(TRUE); SetTopWindow(frame); return TRUE; } BasicFrame::BasicFrame(const wxChar * title, int xpos, int ypos, int width, int height) : wxFrame ( (wxFrame *) NULL, -1, title, wxPoint(xpos, ypos), wxSize(width, height)) { //Fensterelemente panel = new wxPanel(this, wxID_ANY, wxDefaultPosition, wxSize(700, 500)); button = new wxButton(panel, wxID_OK, wxT("Pizza erstellen!"), wxPoint(540, 400), wxSize(120, 20)); teller = new wxBitmap(); teller->LoadFile("C:\\hgr.bmp", wxBITMAP_TYPE_BMP); //Checkboxes cPilze = new wxCheckBox(panel, wxID_ANY, wxT("Pilze"), wxPoint(560, 50), wxSize(120, 20)); cSalami = new wxCheckBox(panel, wxID_ANY, wxT("Salami"), wxPoint(560, 100), wxSize(120, 20)); cSchinken = new wxCheckBox(panel, wxID_ANY, wxT("Schinken"), wxPoint(560, 150), wxSize(120, 20)); cKaese = new wxCheckBox(panel, wxID_ANY, wxT("Käse (Pizzakäse)"), wxPoint(560, 200), wxSize(120, 20)); cTomaten = new wxCheckBox(panel, wxID_ANY, wxT("Tomaten"), wxPoint(560, 250), wxSize(120, 20)); cMozzarella = new wxCheckBox(panel, wxID_ANY, wxT("Mozzarella"), wxPoint(560, 300), wxSize(120, 20)); cSpinat = new wxCheckBox(panel, wxID_ANY, wxT("Spinat"), wxPoint(560, 350), wxSize(120, 20)); } BasicFrame::~BasicFrame() { } //EVT-Tabelle BEGIN_EVENT_TABLE(BasicFrame, wxFrame) EVT_WINDOW_CREATE(BasicFrame::OnPaint) END_EVENT_TABLE() void BasicFrame::OnPaint(wxWindowCreateEvent &event) { wxPaintDC *dc = new wxPaintDC(this); dc->BeginDrawing(); dc->DrawBitmap(*teller, 2, 2, false); dc->EndDrawing(); }
und die *.h:
//main.h #ifndef MAIN_H #define MAIN_H class Pizzavorschau : public wxApp { public: virtual bool OnInit(); }; class BasicFrame : public wxFrame { private: //Fensterelemente wxPanel *panel; wxButton *button; wxBitmap *teller; //checkboses wxCheckBox *cPilze; wxCheckBox *cSalami; wxCheckBox *cSchinken; wxCheckBox *cKaese; wxCheckBox *cTomaten; wxCheckBox *cMozzarella; wxCheckBox *cSpinat; //EVT-Tabelle DECLARE_EVENT_TABLE() public: BasicFrame( const wxChar *title, int xpos, int ypos, int width, int height); ~BasicFrame(); //EVT-Handling void OnPaint(wxWindowCreateEvent &event); }; #endif
Ich hoffe, dass ich ein Lösung für das Problem finde und freue mich auf Antworten.
-
wxPaintDC nicht mit new erstellen.
wxPaintDC dc(this);
Das reicht völlig aus. Und BeginDrawing() und EndDrawing() wird auch nicht mehr benötigt. Ist sogar afaik deprecated.
phlox
-
ich hab die funktion OnPaint jetzt vollgendermaßen geändert:
void BasicFrame::OnPaint(wxWindowCreateEvent &event) { wxPaintDC dc(this); dc.DrawBitmap(*teller, 2, 2, false); }
aber hab immer noch das gleiche Problem...
was is jetz falsch?
ps: danke schonmal im voraus für deine hilfe..
-
Nein, aber dann liegt der Fehler doch noch wo anders begraben.
Kannst du mal nur den Teil vom Code posten, wo der Fehler auftritt?
Und was sagt der Debugger?phlox
-
also beim debugen stellt verweist er auf die "event.h" und es kommt eine Warnung
Eine Zugriffsverletzung (Segmentation Fault) trat in ihrem Programm auf
er verweist in event.h in folgende zeile:
struct WXDLLIMPEXP_BASE wxEventTableEntry : public wxEventTableEntryBase { wxEventTableEntry(const int& evType, int winid, int idLast, wxObjectEventFunction fn, wxObject *data) : wxEventTableEntryBase(winid, idLast, fn, data), m_eventType(evType) //hier-->(Z.2191) { } const int& m_eventType; private: wxEventTableEntry& operator=(const wxEventTableEntry&); };
mehr passiert nich...
das ist mein erstes richtiges wx-prog und ich hab keinen plan was das jetz heist...
-
EVT_WINDOW_CREATE(BasicFrame::OnPaint)
Das passt so nicht. Wenn du einen PaintDC erstellst, muss es auch in einem wxPaintEvent geschehen.
phlox
-
hm...
und wie sorg ich dann dafür, dass er das ganze am anfang zeichnet oder wenn man auf einen button drückt, etc. ?
-
Schau dir einfach mal das Tutorial im Magazin zu wxWidgets an, da wird vieles davon erklärt.
-
ja
mach ich ma.
Eine Frage hät ich noch. Da steht das es für vs sogar einen installer gibt...
Sowas such ich schon lang, aber hab ich noch nie gefunden. Wo find ich den denn?Ansonsten danke für deine hilfe.
Neercseulb.
-
Der liegt bei wxPack dabei. (wxpack.sourceforge.net)
-
aso danke.