最小化窗口时 wxTextCtrl 字体大小未正确更新

问题描述

在我的 wxWidgets C++ 应用程序中,我的代码创建了一堆 wxTextCtrl 并将它们添加一个垂直 sizer,然后将其添加到程序的主垂直 sizer。

#include "main.h"

void Main::AddTextControls()
{
    auto sizer = new wxBoxSizer(wxVERTICAL);

    //cronologia
    Chronology = new wxTextCtrl(this,wxID_ANY,"",wxDefaultPosition,wxDefaultSize,wxTE_READONLY | wxNO_BORDER | wxTE_RIGHT );
    Chronology->SetBackgroundColour(wxColour(235,235,235));
    Chronology->SetForegroundColour(wxColour(125,125,125));
    Chronology->Bind(wxEVT_TEXT,[this](wxCommandEvent& evt) { Chronology_Update(); evt.Skip(); });
    Chronology->Bind(wxEVT_SIZE,[this](wxSizeEvent& evt) { Chronology_Update(); evt.Skip(); });
    sizer->Add(Chronology,3,wxEXPAND);

    //espressione
    Expression = new wxTextCtrl(this,wxTE_READONLY | wxNO_BORDER | wxTE_RIGHT );
    Expression->SetForegroundColour(wxColour(55,55,55));
    Expression->Bind(wxEVT_TEXT,[this](wxCommandEvent& evt) { Expression_Update(); evt.Skip(); });
    Expression->Bind(wxEVT_SIZE,[this](wxSizeEvent& evt) { Expression_Update(); evt.Skip(); });
    sizer->Add(Expression,10,wxEXPAND);

    //memoria
    Memory = new wxTextCtrl(this,"0",wxTE_READONLY | wxNO_BORDER | wxTE_RIGHT);
    Memory->SetBackgroundColour(wxColour(55,55));
    Memory->SetForegroundColour(wxColour(105,105,105));
    Memory->Bind(wxEVT_SIZE,[this](wxSizeEvent& evt) {
        evt.Skip();
        Memory->SetFont(
            wxFontInfo(wxSize(0,Memory->GetSize().y / 1.3))
            .Family(wxFONTFAMILY_SWISS)
            .FaceName("Calibri Light")
        );
        });
    sizer->Add(Memory,wxEXPAND);

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

其中一些文本编辑控件绑定到函数以根据窗口高度和其他一些因素缩放其字体大小:

#include "main.h"

#define EXPRESSION_ANTI_CLIPPING_COEF 55
#define CHRONOLOGY_ANTI_CLIPPING_COEF 35

void Main::Expression_Update()
{
    wxString text = Expression->GetValue();
    const int MaxWidth = GetSize().GetWidth();

    int X,Y = Expression->GetSize().GetHeight();

    wxFont* font = new wxFont(
        wxSize(wxSize(0,Y / 1.3)),wxFONTFAMILY_SWISS,wxFONTSTYLE_norMAL,wxFONTWEIGHT_BOLD,false,"Calibri"
    );

    Expression->GetTextExtent(text,&X,nullptr,NULL,font);

    if ((X + EXPRESSION_ANTI_CLIPPING_COEF) > MaxWidth)
    {
        do
        {
            int const fontHeight = font->GetPixelSize().GetHeight();
            font->SetPixelSize(wxSize(0,fontHeight - 2));
            Expression->GetTextExtent(text,font);
        } while ((X + EXPRESSION_ANTI_CLIPPING_COEF) > MaxWidth);
    }

    Expression->SetFont(*font);
    delete font;
}

void Main::Chronology_Update()
{
    Chronology->SetFont(
        wxFontInfo(wxSize(0,Chronology->GetSize().y / 1.5))
        .Family(wxFONTFAMILY_SWISS)
        .FaceName("Calibri Light")
    );

    const int Width = Chronology->GetTextExtent(Chronology->GetValue()).GetWidth();
    const int MaxWidth = GetSize().GetWidth();

    if ((Width + CHRONOLOGY_ANTI_CLIPPING_COEF) > MaxWidth)
    {
        Chronology_DeleteLast();
    }
}

它们工作正常。但是,当我最大化应用程序时,文本控件会正确更新,但是当我将其最小化时,它们不会更新并保持巨大,直到我调整窗口大小。

无论如何,This is how my app looks like in a normal state,[这是在我最小化之后]。2

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)