调整wxDialogs的大小,使所有文本都在Dialog内部 [英] Size wxDialogs so all of the text is inside the Dialog

查看:108
本文介绍了调整wxDialogs的大小,使所有文本都在Dialog内部的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的wxWidgets程序应该在台式机和Windows平板电脑上都可以运行.两者都使用Windows 10 Pro 64位版本.如何使大小变化的文本无论出现在哪里都在对话框中?

My wxWidgets program should work on both desktop PC and Windows tablet. Both use Windows 10 Pro 64-bit version. How can I make it, that a text with a changing size is inside a dialog no matter where it is displayed?

这就是我现在要做的:

TrackDialog::TrackDialog(wxWindow* parent,wxWindowID id,const wxPoint& pos,
                         const wxSize& size)
{
    //(*Initialize(TrackDialog)
    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"));
    Panel1 = new wxPanel(this, ID_PANEL1, wxDefaultPosition, 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 \n"), wxDefaultPosition, wxDefaultSize, 0, _T("ID_STATICTEXT2"));
    StaticNumberText->Disable();
    wxFont StaticNumberTextFont(10,wxSWISS,wxFONTSTYLE_NORMAL,wxNORMAL,false,_T("Arial"),wxFONTENCODING_DEFAULT);
    StaticNumberText->SetFont(StaticNumberTextFont);
    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_CHOICE1,wxEVT_COMMAND_CHOICE_SELECTED,(wxObjectEventFunction)&TrackDialog::OnChoiceTrackSelect1);
    Connect(ID_BUTTON1,wxEVT_COMMAND_BUTTON_CLICKED,(wxObjectEventFunction)&TrackDialog::OnButtonOkClick);
    //*)
    SetSize(DoGetBestClientSize());
    Fit();
}

文本从曲目编号"更改为以下选项之一:

The text is changed from "Track number" to one of the options below:

void TrackDialog::setOutputAndChoice()
{
    std::vector<wxString> storedTracks = m_xmlReader.getNamesOfTracks(m_path);
    int numberOfTracks  = storedTracks.size();
    StaticNumberText->Enable();
    wxString text;

    // Make sure there are tracks stored in the file.
    if(numberOfTracks > 0){
        text = "There are ";
        text += wxString::Format(wxT("%i"), numberOfTracks);
        text += " tracks stored in the selected file. Select one."
                "\nTrack 1 is the inner track.";
    }
    else{
        text = "Opening file failed. Please chose another"
                                   "file of the right format.";
    }
    StaticNumberText->SetLabel(text);
}

这就是台式机上的外观(在平板电脑上,外观与之相同,这要归功于SetSize(DoGetBestClientSize());)

And this is what it looks like on desktop PC (on the tablet it looks the same, thanks to SetSize(DoGetBestClientSize());)

我该怎么做才能显示所有文本?在调用SetSizerAndFit()之前,我已经尝试在构造函数中设置它,但是如果我想关闭它,则程序崩溃...

What can I do so that all of the text is displayed? I already tried to set it in the constructor before I call SetSizerAndFit() but then my program crashes if I want to close it...

谢谢您的帮助.

我在StaticNumberText的大小调整器中放置了一个面板,并在其中放置了文本,现在我可以显示所有文本,尽管现在StaticText下面有一些讨厌的空间:

I put a panel in the sizer for the StaticNumberText and the text in it and I am able to display all of the text now, though now there is some nasty space underneath the StaticText:

必须有一种更好的方法来更改文本并正确布局对话框...

There has to be a better way to properly layout dialogs with changing text...

推荐答案

定尺运动员需要采取行动才能进入比赛.用户更改主(或对话框)窗口的大小绝对是一项操作.

您还可以触发要求对话框窗口适合其子项的操作.在TrackDialog::setOutputAndChoice()

Sizers need an action to get into game. User changing the size of the main (or dialog) window is definitely an action.

You can also trigger the action asking the dialog window to fit into its children. Call Fit() at the end of your TrackDialog::setOutputAndChoice()

这篇关于调整wxDialogs的大小,使所有文本都在Dialog内部的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆