2016-12-08 3 views
1

Ich habe ein WxWidgets C++ Programm in Code :: Blöcke gemacht. Auf dem Desktop-PC sieht es gut aus, aber nicht auf Windows-Tablets. Wie wxWindows richtig Größe

enter image description here

Das folgende Bild ist, wie es (zumindest den gesamten Text sollte sichtbar sein) aussehen sollte: Window on desktop PC

Ich habe bereits versucht, mehrere Möglichkeiten, zur Zeit, wie dies mein Code sieht :

TrackDialog::TrackDialog(wxWindow* parent,wxWindowID id,const wxPoint& pos, 
         const wxSize& size) 
{ 
    wxBoxSizer* BoxSizer4; 
    wxBoxSizer* BoxSizer5; 
    wxBoxSizer* BoxSizer2; 
    wxBoxSizer* BoxSizer1; 
    wxBoxSizer* BoxSizer3; 
    wxBoxSizer* pPanelSizer; 

    Create(parent, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxSTAY_ON_TOP|wxSUNKEN_BORDER, _T("wxID_ANY")); 
    SetMinSize(wxSize(500,400)); 
    Panel1 = new wxPanel(this, ID_PANEL1, wxPoint(184,136), wxDefaultSize, wxTAB_TRAVERSAL, _T("ID_PANEL1")); 
    pPanelSizer = new wxBoxSizer(wxVERTICAL); 
    BoxSizer1 = new wxBoxSizer(wxHORIZONTAL); 
    StaticSelectText = new wxStaticText(Panel1, ID_STATICTEXT1, _("Select a *.xml file."), wxDefaultPosition, wxDefaultSize, 0, _T("ID_STATICTEXT1")); 
    BoxSizer1->Add(StaticSelectText, 1, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); 
    pPanelSizer->Add(BoxSizer1, 0, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); 
    BoxSizer2 = new wxBoxSizer(wxHORIZONTAL); 
    XmlFilePickerCtrl = new wxFilePickerCtrl(Panel1, ID_FILEPICKERCTRL1, _T("./resources/"), wxEmptyString, _T("*.xml"), wxDefaultPosition, wxDefaultSize, wxFLP_FILE_MUST_EXIST|wxFLP_OPEN|wxFLP_USE_TEXTCTRL, wxDefaultValidator, _T("ID_FILEPICKERCTRL1")); 
    BoxSizer2->Add(XmlFilePickerCtrl, 1, wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); 
    pPanelSizer->Add(BoxSizer2, 0, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); 
    BoxSizer3 = new wxBoxSizer(wxHORIZONTAL); 
    StaticNumberText = new wxStaticText(Panel1, ID_STATICTEXT2, _("Tracknumber"), wxDefaultPosition, wxDefaultSize, 0, _T("ID_STATICTEXT2")); 
    StaticNumberText->Disable(); 
    BoxSizer3->Add(StaticNumberText, 1, wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); 
    pPanelSizer->Add(BoxSizer3, 0, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); 
    BoxSizer4 = new wxBoxSizer(wxHORIZONTAL); 
    ChoiceTrack = new wxChoice(Panel1, ID_CHOICE1, wxDefaultPosition, wxDefaultSize, 0, 0, 0, wxDefaultValidator, _T("ID_CHOICE1")); 
    ChoiceTrack->Disable(); 
    BoxSizer4->Add(ChoiceTrack, 1, wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); 
    pPanelSizer->Add(BoxSizer4, 0, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); 
    BoxSizer5 = new wxBoxSizer(wxHORIZONTAL); 
    ButtonOk = new wxButton(Panel1, ID_BUTTON1, _("OK"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_BUTTON1")); 
    BoxSizer5->Add(ButtonOk, 1, wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); 
    pPanelSizer->Add(BoxSizer5, 0, wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); 
    Panel1->SetSizer(pPanelSizer); 
    pPanelSizer->Fit(Panel1); 
    pPanelSizer->SetSizeHints(Panel1); 
    Center(); 

    Connect(ID_FILEPICKERCTRL1,wxEVT_COMMAND_FILEPICKER_CHANGED,(wxObjectEventFunction)&TrackDialog::OnXmlFilePickerCtrlFileChanged); 
    Connect(ID_BUTTON1,wxEVT_COMMAND_BUTTON_CLICKED,(wxObjectEventFunction)&TrackDialog::OnButtonOkClick); 
    //*) 
    Connect(ID_CHOICE1,wxEVT_COMMAND_CHOICE_SELECTED,(wxObjectEventFunction)&TrackDialog::OnChoiceTrackSelect1); 
    SetSize(DoGetBestClientSize()); 
    Fit(); 
} 

Zusätzlich ist ein weiterer Dialog viel zu groß: Other dialog mit diesem Code:

PortsDialog::PortsDialog(wxWindow* parent,wxWindowID id,const wxPoint& pos, 
         const wxSize& size) 
{ 
    //(*Initialize(PortsDialog) 
    wxBoxSizer* BoxSizer4; 
    wxBoxSizer* BoxSizer5; 
    wxBoxSizer* BoxSizer2; 
    wxBoxSizer* BoxSizer1; 
    wxBoxSizer* BoxSizer3; 

    Create(parent, id, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE, _T("id")); 
    SetClientSize(wxDefaultSize); 
    Move(wxDefaultPosition); 
    Panel1 = new wxPanel(this, ID_PANEL1, wxPoint(200,320), wxDefaultSize, wxTAB_TRAVERSAL, _T("ID_PANEL1")); 
    BoxSizer1 = new wxBoxSizer(wxVERTICAL); 
    BoxSizer2 = new wxBoxSizer(wxVERTICAL); 
    StaticComText = new wxStaticText(Panel1, ID_STATICTEXT1, _("COM Ports"), wxDefaultPosition, wxDefaultSize, 0, _T("ID_STATICTEXT1")); 
    BoxSizer2->Add(StaticComText, 1, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); 
    BoxSizer1->Add(BoxSizer2, 0, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); 
    BoxSizer3 = new wxBoxSizer(wxHORIZONTAL); 
    TextCtrlVibroTacPort = new wxTextCtrl(Panel1, ID_TEXTCTRL1, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_TEXTCTRL1")); 
    BoxSizer3->Add(TextCtrlVibroTacPort, 1, wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); 
    ButtonVibroTacPort = new wxButton(Panel1, ID_BUTTON1, _("Set VibroTac Port"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_BUTTON1")); 
    BoxSizer3->Add(ButtonVibroTacPort, 1, wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); 
    BoxSizer1->Add(BoxSizer3, 0, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); 
    BoxSizer4 = new wxBoxSizer(wxHORIZONTAL); 
    TextCtrlGnssPort = new wxTextCtrl(Panel1, ID_TEXTCTRL2, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_TEXTCTRL2")); 
    BoxSizer4->Add(TextCtrlGnssPort, 1, wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); 
    ButtonGnssPort = new wxButton(Panel1, ID_BUTTON2, _("Set GNSS Port"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_BUTTON2")); 
    BoxSizer4->Add(ButtonGnssPort, 1, wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); 
    BoxSizer1->Add(BoxSizer4, 0, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); 
    BoxSizer5 = new wxBoxSizer(wxHORIZONTAL); 
    ButtonClose = new wxButton(Panel1, ID_BUTTON3, _("Close"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_BUTTON3")); 
    BoxSizer5->Add(ButtonClose, 1, wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); 
    BoxSizer1->Add(BoxSizer5, 0, wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); 
    Panel1->SetSizer(BoxSizer1); 
    BoxSizer1->Fit(Panel1); 
    BoxSizer1->SetSizeHints(Panel1); 

    Connect(ID_TEXTCTRL1,wxEVT_COMMAND_TEXT_ENTER,(wxObjectEventFunction)&PortsDialog::OnButtonVibroTacPortClick); 
    Connect(ID_BUTTON1,wxEVT_COMMAND_BUTTON_CLICKED,(wxObjectEventFunction)&PortsDialog::OnButtonVibroTacPortClick); 
    Connect(ID_TEXTCTRL2,wxEVT_COMMAND_TEXT_ENTER,(wxObjectEventFunction)&PortsDialog::OnButtonGnssPortClick); 
    Connect(ID_BUTTON2,wxEVT_COMMAND_BUTTON_CLICKED,(wxObjectEventFunction)&PortsDialog::OnButtonGnssPortClick); 
    Connect(ID_BUTTON3,wxEVT_COMMAND_BUTTON_CLICKED,(wxObjectEventFunction)&PortsDialog::OnButtonCloseClick); 
    //*) 
    SetSize(DoGetBestClientSize()); 
    Fit(); 
} 

Ich habe viele verschiedene Methoden gesehen, die Größe einzustellen, aber bis jetzt konnte ich nicht einen Weg finden, um die die Größe setzt, so dass alles gut aussieht. Vielen Dank für Ihre Hilfe.


Edit: SetSizerAndFit(BoxSizer1); mit dem PortsDialog als Tibo führt zum Dialog leer ist vorgeschlagen:

Empty PortsDialog

Mit SetSizerAndFit(pPanelSizer); in TrackDialog sieht es beim Start gut, aber wenn ich nachladen den Text die Hälfte davon ist wieder aus dem Fenster und das Programm stürzt ab, wenn das Fenster geschlossen wird ... Das ist so verwirrend.

Zur Version: Ich habe Windows 10 Pro 64-Bit-Version auf allen meinen Geräten (Tablet und PC) und ich verwende WxWidgets v3.0.2 und Code :: Blocks v13.12 (mit GCC-Compiler nach C++ 11 ISO)

+0

@AHue, Welches Betriebssystem haben Sie auf dem Tablet? Welche Version der Bibliothek hast du? Hast du das Layoutmuster getestet? – Igor

+0

Versuchen Sie, 'SetSizerAndFit' mit Ihrem äußersten Sizer als Argument aufzurufen und fiedeln Sie nicht manuell mit der besten Größe. Hilft das? – Tibo

+0

@Tibo das funktioniert nicht (siehe Frage) :( – Lehue

Antwort

0

Es ist wirklich nicht klar, worum es bei dieser Frage geht, es scheint hier einige völlig unabhängige Dinge zu geben, und ich würde empfehlen, diesen zu schließen/zu löschen und jeden von ihnen in separaten neuen Einreichungen zu fragen.

Aber um zu versuchen, die erste Frage zu beantworten, ist der Text nicht vollständig sichtbar, weil auf dem Tablet nicht genug Platz dafür ist. Es wird nicht von selbst umbrochen, Sie müssen ein Steuerelement mit Unterstützung für das Wrapping verwenden oder Wrap() manuell unter wxStaticText manuell aufrufen.

+0

In Ordnung, ich werde Ihrem Rat folgen. http: // stackoverflow .com/questions/41096324/size-wxdialogs-so-all-der-text-is-inside-the-dialog ist die neue Frage.Für den 'Wrap()' Teil muss ich dann die Breite von der Text irgendwie, oder? – Lehue