WxWigets Problem



  • Hallo erstmal,

    ich hab jetzt mal mit WxWidgets angefangen, schon ein paar Editfelder und Radiobuttons erstellt und nen Button mit Klickhandler. Als Klickeventhandler für den Button hab ich folgendes:

    ...
    wxTextCtrl *dat1 = (wxTextCtrl*) FindWindowById(ID_WXEDIT1);
    wxTextCtrl *dat2 = (wxTextCtrl*) FindWindowById(ID_WXEDIT2);
    wxTextCtrl *dat3 = (wxTextCtrl*) FindWindowById(ID_WXEDIT3);
    
    wxRadioButton *b1 = (wxRadioButton*) FindWindowById(ID_WXRADIOBUTTON1);
    wxRadioButton *b2 = (wxRadioButton*) FindWindowById(ID_WXRADIOBUTTON2);
    
    wxString blubb = dat1->GetValue();
    blubb.ToAscii();
    
    wxString blubb2 = dat2->GetValue();
    blubb2.ToAscii();
    
    wxString blubb3 = dat3->GetValue();
    blubb3.ToAscii();
    
    ofstream intof(blubb3.c_str());
    ifstream f( blubb.c_str() );
    ...
    ...
    

    Wenn ich jetzt das Programm ausführe, alle Felder ausfülle und auf den Button klicke, werden die Werte der Editfelder nicht ausgelesen. Zum Test hab ich mir mal den Text aus dem dritten Feld ins erste ausgeben lassen, es sieht danach genauso aus wie vorher. Also: Warum wird der Wert nicht übernommen und wie krieg ichs hin, dass der Text daraus wirklich so genommen wird, dass ich ihn z.b. für Streams benutzen kann, wenn ich ihn mit c_str() umwandle?

    mfG Alemarius Nexus



  • Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum Andere GUIs - Qt, GTK+, wxWidgets verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.


  • Mod

    Hm, ka.

    Wäre interessant zu sehen wie du die Ctrls erstellst.
    Und ich würde Membervariablen den Vorzug geben, gegenüber lokalen per FindWindow erzeugten Variablen.



  • Das Fenster, die Editboxen, usw. sind im WxWidgets Editor (wie heißt das Ding eigentlich?) zusammengeklickt:

    WxEdit3 = new wxTextCtrl(this, ID_WXEDIT3, wxT("Speicherdatei"), wxPoint(56,224), wxSize(183,21), 0, wxDefaultValidator, wxT("WxEdit3"));
    
    	WxButton1 = new wxButton(this, ID_WXBUTTON1, wxT("Platzieren"), wxPoint(97,382), wxSize(98,25), 0, wxDefaultValidator, wxT("WxButton1"));
    
    	WxRadioButton2 = new wxRadioButton(this, ID_WXRADIOBUTTON2, wxT("Ich benutze eine andere Main"), wxPoint(19,329), wxSize(165,25), 0, wxDefaultValidator, wxT("WxRadioButton2"));
    
    	WxStaticText4 = new wxStaticText(this, ID_WXSTATICTEXT4, wxT("von Steve-M"), wxPoint(35,301), wxSize(65,17), 0, wxT("WxStaticText4"));
    
    	WxRadioButton1 = new wxRadioButton(this, ID_WXRADIOBUTTON1, wxT("Ich benutze die stripped Main ohne Externscripts"), wxPoint(19,282), wxSize(255,22), 0, wxDefaultValidator, wxT("WxRadioButton1"));
    	WxRadioButton1->SetForegroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_MENUTEXT));
    
    	WxStaticText3 = new wxStaticText(this, ID_WXSTATICTEXT3, wxT("Gebe die Speicherdatei der neuen Main an"), wxPoint(11,184), wxSize(289,23), 0, wxT("WxStaticText3"));
    	WxStaticText3->SetFont(wxFont(12, wxSWISS, wxNORMAL,wxBOLD, FALSE, wxT("Times New Roman")));
    
    	WxEdit2 = new wxTextCtrl(this, ID_WXEDIT2, wxT("Scriptdatei"), wxPoint(53,130), wxSize(184,21), 0, wxDefaultValidator, wxT("WxEdit2"));
    
    	WxStaticText2 = new wxStaticText(this, ID_WXSTATICTEXT2, wxT("Gebe hier die Textdatei mit dem Script an!"), wxPoint(12,97), wxSize(287,23), 0, wxT("WxStaticText2"));
    	WxStaticText2->SetFont(wxFont(12, wxSWISS, wxNORMAL,wxBOLD, FALSE, wxT("Times New Roman")));
    
    	WxEdit1 = new wxTextCtrl(this, ID_WXEDIT1, wxT("Main-Datei"), wxPoint(52,44), wxSize(186,21), 0, wxDefaultValidator, wxT("WxEdit1"));
    
    	WxStaticText1 = new wxStaticText(this, ID_WXSTATICTEXT1, wxT("Gebe hier die Textdatei mit der Main an!"), wxPoint(15,16), wxSize(278,23), 0, wxT("WxStaticText1"));
    	WxStaticText1->SetFont(wxFont(12, wxSWISS, wxNORMAL,wxBOLD, FALSE, wxT("Times New Roman")));
    


  • Sieht keiner worans liegt? Wenns hilft, hier der komplette Quellcode (es sind noch eine headerdatei und eine andere cpp Datei dabei, die aber von Widgets erstellt wurden und die ich nicht verändert habe, fals ihr die auch noch braucht, kann ich sie auch nachreichen):

    #include "wxwgFrm.h"
    #include <iostream>
    #include <fstream>
    
    using namespace std;
    
    //Do not add custom headers
    //wxDev-C++ designer will remove them
    ////Header Include Start
    ////Header Include End
    
    //----------------------------------------------------------------------------
    // wxwgFrm
    //----------------------------------------------------------------------------
    //Add Custom Events only in the appropriate block.
    //Code added in other places will be removed by wxDev-C++
    ////Event Table Start
    BEGIN_EVENT_TABLE(wxwgFrm,wxFrame)
    	////Manual Code Start
    	////Manual Code End
    
    	EVT_CLOSE(wxwgFrm::wxwgFrmClose)
    	EVT_BUTTON(ID_WXBUTTON1,wxwgFrm::WxButton1Click1)
    END_EVENT_TABLE()
    ////Event Table End
    
    wxwgFrm::wxwgFrm(wxWindow *parent, wxWindowID id, const wxString &title, const wxPoint &position, const wxSize& size, long style)
    : wxFrame(parent, id, title, position, size, style)
    {
    	CreateGUIControls();
    }
    
    wxwgFrm::~wxwgFrm() {}
    
    void wxwgFrm::CreateGUIControls(void)
    {
    	//Do not add custom code here
    	//wxDev-C++ designer will remove them.
    	//Add the custom code before or after the blocks
    	////GUI Items Creation Start
    
    	this->SetSize(119,3,320,465);
    	this->SetTitle(wxT("wxwg"));
    	this->Center();
    	this->SetIcon(wxNullIcon);
    
    	WxEdit3 = new wxTextCtrl(this, ID_WXEDIT3, wxT("Speicherdatei"), wxPoint(56,224), wxSize(183,21), 0, wxDefaultValidator, wxT("WxEdit3"));
    
    	WxButton1 = new wxButton(this, ID_WXBUTTON1, wxT("Platzieren"), wxPoint(97,382), wxSize(98,25), 0, wxDefaultValidator, wxT("WxButton1"));
    
    	WxRadioButton2 = new wxRadioButton(this, ID_WXRADIOBUTTON2, wxT("Ich benutze eine andere Main"), wxPoint(19,329), wxSize(165,25), 0, wxDefaultValidator, wxT("WxRadioButton2"));
    
    	WxStaticText4 = new wxStaticText(this, ID_WXSTATICTEXT4, wxT("von Steve-M"), wxPoint(35,301), wxSize(65,17), 0, wxT("WxStaticText4"));
    
    	WxRadioButton1 = new wxRadioButton(this, ID_WXRADIOBUTTON1, wxT("Ich benutze die stripped Main ohne Externscripts"), wxPoint(19,282), wxSize(255,22), 0, wxDefaultValidator, wxT("WxRadioButton1"));
    	WxRadioButton1->SetForegroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_MENUTEXT));
    
    	WxStaticText3 = new wxStaticText(this, ID_WXSTATICTEXT3, wxT("Gebe die Speicherdatei der neuen Main an"), wxPoint(11,184), wxSize(289,23), 0, wxT("WxStaticText3"));
    	WxStaticText3->SetFont(wxFont(12, wxSWISS, wxNORMAL,wxBOLD, FALSE, wxT("Times New Roman")));
    
    	WxEdit2 = new wxTextCtrl(this, ID_WXEDIT2, wxT("Scriptdatei"), wxPoint(53,130), wxSize(184,21), 0, wxDefaultValidator, wxT("WxEdit2"));
    
    	WxStaticText2 = new wxStaticText(this, ID_WXSTATICTEXT2, wxT("Gebe hier die Textdatei mit dem Script an!"), wxPoint(12,97), wxSize(287,23), 0, wxT("WxStaticText2"));
    	WxStaticText2->SetFont(wxFont(12, wxSWISS, wxNORMAL,wxBOLD, FALSE, wxT("Times New Roman")));
    
    	WxEdit1 = new wxTextCtrl(this, ID_WXEDIT1, wxT("Main-Datei"), wxPoint(52,44), wxSize(186,21), 0, wxDefaultValidator, wxT("WxEdit1"));
    
    	WxStaticText1 = new wxStaticText(this, ID_WXSTATICTEXT1, wxT("Gebe hier die Textdatei mit der Main an!"), wxPoint(15,16), wxSize(278,23), 0, wxT("WxStaticText1"));
    	WxStaticText1->SetFont(wxFont(12, wxSWISS, wxNORMAL,wxBOLD, FALSE, wxT("Times New Roman")));
    	////GUI Items Creation End
    }
    
    void wxwgFrm::wxwgFrmClose(wxCloseEvent& event)
    {
        Destroy();
    }
    
    /*
     * WxButton1Click1
     */
    void wxwgFrm::WxButton1Click1(wxCommandEvent& event)
    {
    
    wxTextCtrl *dat1 = (wxTextCtrl*) FindWindowById(ID_WXEDIT1);
    wxTextCtrl *dat2 = (wxTextCtrl*) FindWindowById(ID_WXEDIT2);
    wxTextCtrl *dat3 = (wxTextCtrl*) FindWindowById(ID_WXEDIT3);
    
    wxRadioButton *b1 = (wxRadioButton*) FindWindowById(ID_WXRADIOBUTTON1);
    wxRadioButton *b2 = (wxRadioButton*) FindWindowById(ID_WXRADIOBUTTON2);
    
    wxString blubb = dat1->GetValue();
    blubb.ToAscii();
    
    wxString blubb2 = dat2->GetValue();
    blubb2.ToAscii();
    
    wxString blubb3 = dat3->GetValue();
    blubb3.ToAscii();
    
    cout<<dat1->GetValue();
    
    ofstream intof(blubb3.c_str());
    ifstream f( blubb.c_str() );
    string zeile;
    
        for( string x; getline( f, x ); )
        {
             ifstream h( blubb2.c_str() );
             if (x == "03A4: name_thread 'MAIN'") {
                   char b[256];
                   h.getline(b,sizeof(b));
                   string c = b;
                   string f = c.substr(1,strlen(b));
                   string end = "004F: create_thread ££";
                   end += f;
                   intof<<x<<endl;
                   intof<<end<<endl;
             }
    
              if (b2->GetValue() == true) {     
    
            if (x == ";-------------Mission 0---------------") {
                intof<<endl;
                intof << h.rdbuf();
    
                intof << endl << endl << endl;
    //            system("cls");
            }
            } else if (b1->GetValue() == true) {
    
             if (x == "0002: jump ££MAIN_32") {
    
             intof << x << endl;
                intof<<endl;
                intof << h.rdbuf();
    
                intof << endl << endl << endl;
            }      
    
            } else {
            exit(0);
            }
    
            if (x != "03A4: name_thread 'MAIN'" && x != "0002: jump ££MAIN_32") {
            intof << x << endl;
            } else {
            }
    
        }
    
    }
    

  • Mod

    Warum benutzt du nicht die Membervariablen der Klasse direkt dafür? (z.b. WxEdit3, etc.)



  • Wie meinst du das? Meinst du z.B. bei den Streams direkt GetValue verwenden oder wie? Ich hab mit den Codes eigentlich noch nicht viel gemacht als das mit dem GetValue(). Ich benutze nur den Editor von Widgets. Kannst du mir vielleicht ein Beispiel geben, sowohl mit dem Code als auch, an welcher Stelle.

    Hoffe, das ist nicht zu viel verlangt.


  • Mod

    Nein. Hab dafür keine Zeit. Bitte arbeite dich in die Grundlagen von C++ ein, bevor du dich in die GUI Programmierung stürzt.
    Evtl. hilft es auch, wenn du dir die Artikel zu wxWidgets im Magazin durchliest.



  • Ich kann C++ einigermaßen, nur habe ich mich in die Teile der Fensterprogrammierung nicht eingearbeitet, ich finde kein gutes Tutorial dafür. Deshalb habe ich gehofft, der wxWidgets Editor würde so funktionieren, wie ich es will.

    Unter einer Membervariable von WxEdit verstehe ich:

    WxEdit.value
    

    Ob das aber stimmt, weiß ich eben nicht.


  • Mod

    Ich sprach von der Membervariablen von der Fensterklasse selber.
    Also WxEdit3:

    WxEdit3 = new wxTextCtrl(this, ID_WXEDIT3, wxT("Speicherdatei"), wxPoint(56,224), wxSize(183,21), 0, wxDefaultValidator, wxT("WxEdit3"));
    

    Da hier mit new gearbeitet wird (wie immer in wxWidgets wenn Fenster erstellt werden), ist dies ein Pointer.
    Ergo musst du auf seinen Inhalt mit -> zugreifen. Du musst dir also garnicht die Fenster in der Funktion mittels ID besorgen, die sind bereits als Membervariablen in der Klasse vorhanden.

    Nochmals der Rat, die Artikel zu wxWidgets im Magazin zu lesen.



  • Naja ich denke, das hat keinen Sinn, ich verstehe die Fensterprogrammierung nicht wirklich und lasse mal lieber erstmal die Finger davon. Trotzdem danke für deine Hilfe.


Anmelden zum Antworten