如何使文本在 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 上,这主要看起来像是文本垂直居中的文本控件:
边框有点不对,但我认为这是最好的了。
如何使用 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 上,这主要看起来像是文本垂直居中的文本控件:
边框有点不对,但我认为这是最好的了。