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.


  • Mod

    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..


  • Mod

    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...


  • Mod

    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. ?


  • Mod

    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.


  • Mod

    Der liegt bei wxPack dabei. (wxpack.sourceforge.net)



  • aso danke.


Anmelden zum Antworten