wxdev Probleme



  • Hi, auf der Suche nach einer Gratisalternative zu Visual C++ Express (ich mag .NET nicht) bin ich auf wxWidgets und wxDev gestossen.
    Nun arbeite ich an einem Programm das einen Edit-Dialog besitzt, der wie folgt aufgebaut ist:

    BEGIN_EVENT_TABLE(EditDlg,wxDialog)
    	////Manual Code Start
    	////Manual Code End
    
    	EVT_CLOSE(EditDlg::OnClose)
    
    	EVT_TEXT(ID_EDIT_HEXWORD,EditDlg::edit_hexwordUpdated)
    END_EVENT_TABLE()
    ////Event Table End
    
    EditDlg::EditDlg(wxWindow *parent, wxWindowID id, const wxString &title, const wxPoint &position, const wxSize& size, long style)
    : wxDialog(parent, id, title, position, size, style)
    {
    	CreateGUIControls();
    }
    
    EditDlg::~EditDlg()
    {
    }
    
    void EditDlg::CreateGUIControls()
    {
    	//Do not add custom code between
    	//GUI Items Creation Start and GUI Items Creation End.
    	//wxDev-C++ designer will remove them.
    	//Add the custom code before or after the blocks
    	////GUI Items Creation Start
    
    	SetTitle(wxT("Edit"));
    	SetIcon(wxNullIcon);
    	SetSize(8,8,320,153);
    	Center();
    
    	label_dec = new wxStaticText(this, ID_LABEL_DEC, wxT("Dezimal:"), wxPoint(12,76), wxDefaultSize, 0, wxT("label_dec"));
    	label_dec->SetFont(wxFont(8, wxSWISS, wxNORMAL,wxNORMAL, false, wxT("Tahoma")));
    
    	label_hex = new wxStaticText(this, ID_LABEL_HEX, wxT("HEX:"), wxPoint(11,38), wxDefaultSize, 0, wxT("label_hex"));
    	label_hex->SetFont(wxFont(8, wxSWISS, wxNORMAL,wxNORMAL, false, wxT("Tahoma")));
    
    	label_lb = new wxStaticText(this, ID_LABEL_LB, wxT("LowByte:"), wxPoint(234,11), wxDefaultSize, 0, wxT("label_lb"));
    	label_lb->SetFont(wxFont(8, wxSWISS, wxNORMAL,wxNORMAL, false, wxT("Tahoma")));
    
    	label_hb = new wxStaticText(this, ID_LABEL_HB, wxT("HighByte:"), wxPoint(153,8), wxDefaultSize, 0, wxT("label_hb"));
    	label_hb->SetFont(wxFont(8, wxSWISS, wxNORMAL,wxNORMAL, false, wxT("Tahoma")));
    
    	label_word = new wxStaticText(this, ID_LABEL_WORD, wxT("WORD:"), wxPoint(73,8), wxDefaultSize, 0, wxT("label_word"));
    	label_word->SetFont(wxFont(8, wxSWISS, wxNORMAL,wxNORMAL, false, wxT("Tahoma")));
    
    	spin_dechb = new wxSpinCtrl(this, ID_SPIN_DECHB, wxT("0"), wxPoint(232,74), wxSize(70,22), wxSP_ARROW_KEYS, 0, 255, 0);
    	spin_dechb->SetFont(wxFont(8, wxSWISS, wxNORMAL,wxNORMAL, false, wxT("Tahoma")));
    
    	spin_declb = new wxSpinCtrl(this, ID_SPIN_DECLB, wxT("0"), wxPoint(151,73), wxSize(63,22), wxSP_ARROW_KEYS, 0, 255, 0);
    	spin_declb->SetFont(wxFont(8, wxSWISS, wxNORMAL,wxNORMAL, false, wxT("Tahoma")));
    
    	spin_decword = new wxSpinCtrl(this, ID_SPIN_DECWORD, wxT("0"), wxPoint(75,74), wxSize(67,22), wxSP_ARROW_KEYS, 0, 65535, 0);
    	spin_decword->SetFont(wxFont(8, wxSWISS, wxNORMAL,wxNORMAL, false, wxT("Tahoma")));
    
    	edit_hexhb = new wxTextCtrl(this, ID_EDIT_HEXHB, wxT("00"), wxPoint(232,30), wxSize(64,32), 0, wxDefaultValidator, wxT("edit_hexhb"));
    	edit_hexhb->SetMaxLength(2);
    	edit_hexhb->SetFont(wxFont(8, wxSWISS, wxNORMAL,wxNORMAL, false, wxT("Tahoma")));
    
    	edit_hexlb = new wxTextCtrl(this, ID_EDIT_HEXLB, wxT("00"), wxPoint(150,31), wxSize(64,31), 0, wxDefaultValidator, wxT("edit_hexlb"));
    	edit_hexlb->SetMaxLength(2);
    	edit_hexlb->SetFont(wxFont(8, wxSWISS, wxNORMAL,wxNORMAL, false, wxT("Tahoma")));
    
    	edit_hexword = new wxTextCtrl(this, ID_EDIT_HEXWORD, wxT("0000"), wxPoint(74,31), wxSize(64,28), 0, wxDefaultValidator, wxT("edit_hexword"));
    	edit_hexword->SetMaxLength(4);
    	edit_hexword->SetFont(wxFont(8, wxSWISS, wxNORMAL,wxNORMAL, false, wxT("Tahoma")));
    	////GUI Items Creation End
    }
    
    void EditDlg::OnClose(wxCloseEvent& /*event*/)
    {
    	Destroy();
    }
    
    /*
     * edit_hexwordUpdated
     */
    void EditDlg::edit_hexwordUpdated(wxCommandEvent& event)
    {
        wxString temp = "Text ";  // Geht
        temp += "mehr Text";  // Geht
        this->edit_hexword->Clear();  // Fehler
    }
    

    Wenn ich in der Event-Funktion edit_hexwordUpdated auf ein Memberobjekt der Klasse EditDlg zurückgreife, bekomme ich immer eine Access Violation.
    Die Access Violation tritt bereits beim erzeugen des Dialogobjektes im übergeordneten Fenster auf. Dort steht:

    EditDlg *editdialog = new EditDlg(NULL);
    

    Das unerklärliche für mich ist, dass mein Programm bei allen anderen Events von edit_hexword (OnMaxLen usw.) einwandfrei läuft, nur bei OnUpdated hängts.



  • Würde dir eher zu Codeblocks als zu wxDev raten. www.codeblocks.org

    Und du solltest dem Dialog afaik schon ein gültiges Parent geben.
    Ansonsten was sagt der Debugger?



  • Ich versuche mal auf CodeBlocks umzusteigen, leider bringe ich das mit der Installation nicht hin. Gibts irgendwo gute Tutorials für CodeBlocks mit MinGW und WxWidgets ? Der "CodeBlocks Setup Guide" hilft mir irgendwie nicht richtig weiter.



  • Müsstest du mal im C::B Forum suchen.
    Welche Version installierst du denn?



  • Habs nun selber hingekriegt, http://wiki.codeblocks.org/index.php?title=WxWindowsQuickRef sehr hilfreiches Tutorial.
    Nun hat sich auch das genannte Problem gelöst, funktioniert nun einwandfrei ;). Leider stört mich die Auto-Vervollständigung in Code-Editor von Code::Blocks etwas, wenn ich this-> eingebe listet er mir korrekt alle möglichen Objekte in der Klasse auf, nach this->Button1-> ist jedoch schon fertig. Es werden keine Methoden oder sonstiges mehr angezeigt. Muss man das einfach hinnehmen oder kann man da noch etwas einstellen ?



  • versuch mal nur Button1->. Bei tieferen Zugriffen hat er manchmal probleme.
    Stört mich selber häufig, wenn er nonsense anzeigt. (globale ifdefs oder funktionen aus allen möglichen libs)



  • Ok, funkioniert nun auch, ich hatte bei Global Variables als include Dir. irgend einen komischen Pfad stehen, hat die Auto-Vervollständigung wohl verwirrt.
    Danke für deine Hilfe C::B fan, werde wahrscheinlich auch noch zum C::B fan, das kackt wenigstens nicht alle 20min mit einer Fehlermeldung ab wie wxDev.



  • Visual Studio kommt auch ohne .NET aus, darfst nur keine .NET-Anwendung in den Projektoptionen wählen 😉



  • Ich habe mir schon vorgestellt meine Programme so weit wie möglich zusammenzuklicken. Da ich derzeit kein Visual Studio kaufen möchte, bin ich unter VC Express auf .NET beschränkt. So habe ich mich für wxWidgets und eine entsprechende Entwicklungsumgebung entschieden.
    Leider stecken wxdev-c++ und codeblocks im Vergleich zu Visual Studio noch in den Kinderschuhen. Bei wxdev-c++ kommen eigenartige Fehler und codeblocks hat Mühe mit der Auto-Vervollständigung.

    Es ist ja auch normal, wenn eine freeware-Entwicklungsumgebung nicht an eine kommerzielle rankommt, wer würde sonst dem Bill Gates noch Software abkaufen 😉 .



  • noobc schrieb:

    Da ich derzeit kein Visual Studio kaufen möchte, bin ich unter VC Express auf .NET beschränkt.

    Sorry, mit Visual Studio meinte ich natürlich auch die Express-Edition. Ich baue auch erfolgreich meine wxWidgets-Anwendungen unter der MSVC Express Edition, und das ohne .NET! 🙂

    Probier's doch aus, dann musst Du Dich auch nicht mit Code::Blocks oder dem ultrabuggy wxDev-C++ ärgern.



  • MSVC Express Edition ist so unter der "Freeware" mit das vernünftigste, was man so für den Heimgebrauch nutzen kann.
    Code::Blocks währe aber auf jeden Fall trotzdem immer noch dem nicht mehr aktuellen wxDev vorzuziehen.
    Aber für Lau kann man auch nicht große Anforderungen stellen.
    Wenn du eine wirklich leistungsfähige Entwicklungsumgebung brauchst wie Borland Builder oder entsprechendes von MS, dann musst du halt ein paar Euro abdrücken.


Anmelden zum Antworten