如何解决最小化窗口时 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 举报,一经查实,本站将立刻删除。