[wxWidgets] Neues Frame mit Tabs (Registerkarten)
-
Also ganz normal einfach die Klasse in den Sizer einfügen.
Die Notebookpages leitest du am besten von wxPanel ab, und fügst sie dann mittels AddPage zum Notebook hinzu, nach dem du sie erzeugt hast.
-
Razer6 schrieb:
Hallo
Danke für die Antworten. Leider blicke ich nicht gannz durch :(.
void usbprogFrm::WxButton6Click(wxCommandEvent& event) { wxDialog dialog = new wxDialog(this, 0, "TITLE", wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE, "TEST"); }
Hier möchte ich, dass sich ein Dialog öffnet. Leider funktioniert das nicht ganze
Ich bekomm den Fehler 481 D:\usbprog\trunk\usbprog_tools\Kopie von usbprog-gui\usbprogFrm.cpp conversion from `wxDialog*' to non-scalar type `wxDialog' requested
Woran liegt denn das?
Danke im VorausGruß Robert
Let the stars shine bright. Das seh ich doch sofort ^^
wxDialog* dialog etcblabla
Was du definierst solltest du auch deklarieren. Du reservierst Speicher für einen Zeiger und legst eine Variable des Typs wxDialog an.
-
Leider blicke ich immer noch nicht durch
Hier mal meine KLasse mit dem Konstruktor:class HelpDialog : public wxDialog { wxNotebook* tab; wxPanel* p1; wxPanel* p2; wxButton* btP1Ok; wxButton* btP2Ok; protected: public: HelpDialog(wxWindow* parent, int id); virtual ~HelpDialog(); };
Hier der Konstruktor:
HelpDialog::HelpDialog(wxWindow* parent, int id):wxDialog(parent, wxT("Help"),id) { wxBoxSizer* mainbox = new wxBoxSizer(wxVERTICAL); tab = new wxNotebook(parent, id, wxDefaultPosition, wxDefaultSize, 0, "TAB"); wxStaticBoxSizer* desSizer = new wxStaticBoxSizer(wxHORIZONTAL,this,wxT("Description")); p1 = new wxPanel(this,-1); desSizer->Add(p1,0,wxALL|wxEXPAND,5); btP1Ok = new wxButton(this,wxNewId(),wxT("Ok")); desSizer->Add(btP1Ok,0,wxALL,5); wxStaticBoxSizer* helpSizer = new wxStaticBoxSizer(wxHORIZONTAL,this,wxT("Description")); p2 = new wxPanel(this,-1); helpSizer->Add(p1,0,wxALL|wxEXPAND,5); btP2Ok = new wxButton(this,wxNewId(),wxT("Ok")); helpSizer->Add(btP2Ok,0,wxALL,5); tab->AddPage(p1, "Description", true, -1); tab->AddPage(p2, "Help", false, -1); SetSizer(mainbox); mainbox. SetAutoLayout(true); Layout(); Fit(); }
Diese Fehlermeldungen bekomme ich:
helpdialog.cpp: In constructor `HelpDialog::HelpDialog(wxWindow*, int)': helpdialog.cpp:7: warning: `__base_ctor' is deprecated (declared at C:/Programme/Dev-Cpp/include/common/wx/msw/dialog.h:101) helpdialog.cpp:28: error: `SetAutoLayout' is not a type helpdialog.cpp:28: error: request for member of non-aggregate type before '(' token mingw32-make.exe: *** [Objects/MingW/helpdialog.o] Error 1
Ich kenn mich leider mit den Widgets nicht so wirklich aus. Ich hoffe mir kann das wer erklären.
Danke im Voraus
Gruß Robert
-
Verwende bei Pointer -> statt .
Und OK/Cancel Buttons solltest du am besten mit CreateStdButtonSizer
http://wxwidgets.org/manuals/stable/wx_wxdialog.html#wxdialog
-
Danke.
Jetzt lässt es sich mal kompilieren.
Eine Warning hab ich noch:helpdialog.cpp:7: warning: `__base_ctor' is deprecated (declared at C:/Programme/Dev-Cpp/include/common/wx/msw/dialog.h:101)
Woran liegt das?
Wenn ich nun ein Objekt dieser Kalsse erstelle und anzeige, öffnet sich jedoch nur ein sehr kleines Fenster. Wie kann ich das vergrößern?Gruß Robert
-
wxWindow::SetSize
bzw.wxWindow::SetMinSize
-
Danke. Jedoch funktioniert es nicht ganz. Es friert bei mir eigentlich ein habe ich bemerkt. Weiß jemand warum. Es öffnet sich ein kleines Eck von nem Fenster aber das wars.
Hier der Konstruktor:
HelpDialog::HelpDialog(wxWindow* parent, int id):wxDialog(parent, wxT("Help"),id) { wxBoxSizer* mainbox = new wxBoxSizer(wxVERTICAL); tab = new wxNotebook(parent, id, wxDefaultPosition, wxDefaultSize, 0, "TAB"); wxStaticBoxSizer* desSizer = new wxStaticBoxSizer(wxHORIZONTAL,this,wxT("Description")); p1 = new wxPanel(this,-1); desSizer->Add(p1,0,wxALL|wxEXPAND,5); desSizer->Add(CreateStdDialogButtonSizer(wxOK),0,wxALL,5); wxStaticBoxSizer* helpSizer = new wxStaticBoxSizer(wxHORIZONTAL,this,wxT("Description")); p2 = new wxPanel(this,-1); helpSizer->Add(p1,0,wxALL|wxEXPAND,5); helpSizer->Add(CreateStdDialogButtonSizer(wxOK),0,wxALL,5); tab->AddPage(p1, "Description", true, -1); tab->AddPage(p2, "Help", false, -1); SetMinSize(wxSize(400,300)); SetSizer(mainbox); SetAutoLayout(true); Layout(); Fit(); }
Gruß Robert
-
Das Parent der Controls ist der Dialog selber. Du musst also parent mit this im Konstruktor ersetzen.
-
Wenn ich das habe:
HelpDialog::HelpDialog(wxWindow* parent, int id):wxDialog(this, wxT("Help"),id)
Beim erzeugen des Objektes schließt das ganze Programm.
Gruß Robert
-
Klar schließt es.
Ich sprach ja auch vom ersetzen im Konstruktor, nicht beim Konstruktoraufruf von wxDialog.... = new wxNotebook(this,...);
-
Geht aber trotzdem nicht mit dem Aufruf:
tab = new wxNotebook(this, id, wxDefaultPosition, wxDefaultSize, 0, "TAB");
Was ist denn noch falsch?
Sorry für mein UnwissenGruß Robert
-
Du must bzw. darfst nicht die Notebookpages einem Sizer übergeben, sondern nur dem Notebook selber, das macht dann den Rest.
Ansonsten sieht es ganz gut aus. Hab leider keine Zeit das in der IDE zu testen
-
Danke für die Gedult;)
HelpDialog::HelpDialog(wxWindow* parent, int id):wxDialog(parent, wxT("Help"),id) { wxBoxSizer* mainbox = new wxBoxSizer(wxVERTICAL); tab = new wxNotebook(this, id, wxDefaultPosition, wxDefaultSize, 0, "TAB"); p1 = new wxPanel(this,-1); p2 = new wxPanel(this,-1); tab->AddPage(p1, "Description", true, -1); tab->AddPage(p2, "Help", false, -1); SetMinSize(wxSize(400,300)); SetSizer(mainbox); SetAutoLayout(true); Layout(); Fit(); }
Wenn ich das so habe, habe ich jedoch noch immer den gleichen Effekt. Das Programm öffnet ein kleines Eckchen und bleibt hängen. anzeien tu ich den dialog mit showModal(). Weißt du woran das liegt?
Gruß Robert
-
Nein, wie erzeugst/öffnest du denn den Dialog?
Oh, und wo ich es gerade sehe, das Parent der Notebookseiten ist das Notebook selber!
-
Aufgerufen wird folgendermaßen:
HelpDialog dlg(this,-1); dlg.ShowModal();
Beim Notebook, meinst du so?
tab = new wxNotebook(tab, id, wxDefaultPosition, wxDefaultSize, 0, "TAB");
Das geht nämlich nicht. Welche ID bekommt das überhaupt? id passt ja auch nicht, oder?
Gruß Robert
-
phlox81 schrieb:
Oh, und wo ich es gerade sehe, das Parent der Notebookseiten ist das Notebook selber!
-
Ich hab echt schon Tomaten auf den Augen...
p1 = new wxPanel(tab,-1); p2 = new wxPanel(tab,-1);
Das geht aber auch nicht.
Gruß Robert
-
HelpDialog::HelpDialog(wxWindow* parent, int id):wxDialog(parent, wxT("Help"),id) { wxBoxSizer* mainbox = new wxBoxSizer(wxVERTICAL); tab = new wxNotebook(this, id, wxDefaultPosition, wxDefaultSize, 0, "TAB"); p1 = new wxPanel(tab,-1); p2 = new wxPanel(tab,-1); tab->AddPage(p1, "Description", true, -1); tab->AddPage(p2, "Help", false, -1); //notebook muss natürlich in den Sizer. mainbox->Add(tab,1,wxEXPAND|wxALL); SetMinSize(wxSize(400,300)); SetSizer(mainbox); SetAutoLayout(true); Layout(); Fit(); }
So müsste es klappen.
-
Danke, so öffnet ess sich schon mal
Jedoch ist das ganze sauklein. NIcht die 400x300. Weißt du woran das liegt?
Gruß Robert
-
Musste mal was rumspielen.
SetMinSize(wxSize(400,300)); SetSizer(mainbox); SetAutoLayout(true);
Evtl hilft es die Reihenfolge von den Funktionen zu vertauschen, bzw. SetAutoLayout mal auszukommentieren etc.
Und zum Thema Dialog steht eigentlich alles in meinem Tutorial im Magazin:
http://c-plusplus.net/forum/viewtopic-var-t-is-175682.html