如何使文本在 wxStaticText 中垂直居中?

how to make text vertically centered in wxStaticText?

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

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

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

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

示例:

wxBoxSizer *mysizer=new wxBoxSizer...
wxStaticText *sometext=new wxStaticText...

mysizer->Add(sometext, 0, wxALIGN_CENTER_VERTICAL);

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

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

这可以通过创建无边框文本控件然后将该文本控件置于另一个 window 的中心来实现,该控件的唯一目的是看起来像文本控件的边框

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 上,这主要看起来像是文本垂直居中的文本控件:

边框有点不对,但我认为这是最好的了。