【问题标题】:how to make text vertically centered in wxStaticText?如何使文本在 wxStaticText 中垂直居中?
【发布时间】:2021-06-01 13:32:20
【问题描述】:

如何使用 WxWidget 使 cpp Windows 中的 wxStaticText(单行)中的文本垂直居中?

例如,如果我使用默认字体大小增加 wxStaticText(单行)的高度,则文本顶部对齐,我希望它垂直居中。

【问题讨论】:

    标签: c++ windows wxwidgets


    【解决方案1】:

    我认为文本控件不支持垂直文本对齐样式。据我所知,如果你想创建一个文本垂直居中的文本控件,唯一的方法就是伪造它。

    这可以通过创建一个无边框文本控件然后将该文本控件居中在另一个窗口中来完成,该窗口的唯一目的是看起来像文本控件的边框

    wxPanel* pseudoText = new wxPanel(<parent>, wxID_ANY, wxDefaultPosition,
                                      wxDefaultSize,
                                      wxBORDER_THEME|wxTAB_TRAVERSAL);
    wxTextCtrl* text = new wxTextCtrl(pseudoText, wxID_ANY, wxString(),
                                      wxDefaultPosition, wxDefaultSize,
                                      wxTE_CENTRE|wxBORDER_NONE);
    pseudoText->SetBackgroundColour(text->GetBackgroundColour());
    
    wxBoxSizer* szr = new wxBoxSizer(wxVERTICAL);
    szr->AddStretchSpacer();
    szr->Add(text, wxSizerFlags().Expand());
    szr->AddStretchSpacer();
    pseudoText->SetSizer(szr);
    

    在 Windows 上,这看起来像是一个文本垂直居中的文本控件:

    边框略有错误,但我认为这是可以做到的最好的。

    【讨论】:

      【解决方案2】:

      你的 wxStaticText 应该包含在 sizer 中。如果不是,那么我建议您阅读有关 sizer 的内容并开始使用它们。市面上有一些不错的(免费和商业)UI 编辑器,使用起来非常容易。

      wxStaticText 本身只有将文本水平居中的选项(可能是底层操作系统的限制),但是当您将 wxStaticText 控件添加到 sizer 时,您可以指定任何对齐方式(CENTER_VERTICALLY、CENTER_HORIZONTALLY 等...)。

      例子:

      wxBoxSizer *mysizer=new wxBoxSizer...
      wxStaticText *sometext=new wxStaticText...
      
      mysizer->Add(sometext, 0, wxALIGN_CENTER_VERTICAL);
      

      重要的是,sizer 本身填充了您希望将文本垂直居中的整个空间。查看 wxWidgets sizer 示例。您需要对 sizer 的工作原理有一个基本的了解。

      【讨论】:

      • 仍然无法正常工作,我使用了以下代码:wxBoxSizer* topsizer = new wxBoxSizer(wxHORIZONTAL); wxTextCtrl* NameText = new wxTextCtrl(p, wxID_ANY, "", wxDefaultPosition, wxSize(250, 30)); topsizer-&gt;Add(NameText, 0, wxALIGN_CENTER_VERTICAL);
      • 尝试在文本控件的两侧添加可拉伸的间隔。像这样...topsizer-&gt;AddStretchSpacer(1); topsizer-&gt;Add(NameText, 0, wxALIGN_CENTER_VERTICAL); topsizer-&gt;AddStretchSpacer(1);... 两侧的 2 个垫片应该将文本控件推到中心。
      • @Klaffy,你得到任何断言了吗?或者它只是不对齐?你的 wxWidgets 版本是多少?
      • 答案应该补充说,sizer 本身必须有足够的空间让静态文本居中。如果它对于静态文本大小的高度足够大,那么什么都不会发生。
      • @NewPagodi 我没有尝试将小部件居中,但我试图在文本控件内垂直居中文本,因为当我增加文本控件的高度时,文本在顶部垂直对齐.
      猜你喜欢
      • 2013-10-15
      • 1970-01-01
      • 2021-09-14
      • 2012-11-13
      • 2017-04-05
      • 1970-01-01
      • 1970-01-01
      • 2011-07-23
      • 1970-01-01
      相关资源
      最近更新 更多