【问题标题】:Scaling font as window is resized调整窗口大小时缩放字体
【发布时间】:2021-08-18 22:08:37
【问题描述】:

我正在 wxWidgets 中编写一个 C++ 计算器应用程序。

我希望在调整窗口大小时缩放所有按钮和两个 wxTextCtrl 的字体。这是怎么做的?如果有帮助,我会发布一些代码。

text_controls.cpp

#include "main.h"

void Main::AddTextControls()
{
    //creazione font
    wxFont Expression(10, wxFONTFAMILY_SWISS, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_LIGHT, false, "Lato");
    wxFont Main(30, wxFONTFAMILY_SWISS, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_LIGHT, false, "Lato");

    wxBoxSizer* sizer = new wxBoxSizer(wxVERTICAL);

    ExpText = new wxTextCtrl(this, wxID_ANY, "", wxDefaultPosition, wxDefaultSize, wxTE_READONLY | wxNO_BORDER);
    ExpText->SetFont(Expression);
    ExpText->SetForegroundColour(wxColour(125, 125, 125));
    sizer->Add(ExpText, 1, wxEXPAND);

    MainText = new wxTextCtrl(this, wxID_ANY, "", wxDefaultPosition, wxDefaultSize, wxTE_READONLY | wxNO_BORDER);
    MainText->SetFont(Main);
    MainText->SetForegroundColour(wxColour(55, 55, 55));
    MainText->Bind(wxEVT_TEXT, &Main::OnTextChange, this);
    sizer->Add(MainText, 2, wxEXPAND);

    MainSizer->Add(sizer, 4, wxEXPAND);
}

【问题讨论】:

    标签: c++ fonts wxwidgets


    【解决方案1】:

    您可以使用wxFont::SetPixelSize() 将字体大小设置为文本控件高度的三分之一。例如:

    MainText->Bind(wxEVT_SIZE, [this](wxSizeEvent& e) {
        e.Skip();
        MainText->SetFont(wxFontInfo(wxSize(0, MainText->GetSize().y / 3)).Family(wxFONTFAMILY_SWISS).FaceName("Lato").Light());
    });
    

    (这也表明使用一种比 ctor 采用不计其数的参数更易读的方式来创建 wxFont)。

    【讨论】:

    • I tried pasting this code into mine,它给出了各种各样的错误。 [E1730] 成员“Main::MainText”不是变量 [E1738] 无法在 lambda 表达式的主体中引用容器函数“this”,除非它包含在捕获列表中 [E0135] 类“wxFontInfo”不包括任何“Facename”成员(我不知道我翻译是否正确,我使用的是意大利语 Visual Studio)。
    • 我没有意识到MainText是一个成员变量,在这种情况下你需要捕获this。我还在FaceName 中打错了字,抱歉。我现在已经更新了答案,但无论如何,它更多的是作为一个说明性的例子,而不是按原样使用的东西。
    • 它起作用了,尽管我需要将 wxFontInfo 的大小从 wxSize 更改为 int,因为它会导致问题。非常感谢!
    • 如果您使用 int 大小,它给出的大小(以点为单位)与以像素为单位的大小不同,尤其是在使用高 DPI 时(即显示缩放 > 1)。
    • 嗯,对不起,也许你应该改用 0,我会更新答案。
    猜你喜欢
    • 1970-01-01
    • 2015-12-24
    • 1970-01-01
    • 2012-12-21
    • 2013-12-22
    • 2015-12-27
    • 1970-01-01
    • 2011-02-28
    • 2016-07-07
    相关资源
    最近更新 更多