c++ - 调整窗口大小时缩放字体
问题描述
我正在 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);
}
解决方案
您可以使用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());
});
wxFont
(这也显示了使用比 ctor 采用无数个参数更易读的方式来创建 a )。
推荐阅读
- java - Java如何读取某个数字并将其显示为图形
- r - 如何使用 ggplot2 填充等高线图?
- php - 在 SQL 中创建价值循环原型的最佳方法是什么?
- html - 如何链接到不同 HTML 页面上的特定部分?
- keras - 如何在迁移学习中添加连接?
- windows - 用于基于文件名将文件移动到不同文件夹的 Windows 批处理脚本,用于大数据量
- xamarin.ios - 让按钮宽度随文本增长并正确对齐
- ruby - 如何动态地为类创建 attr_reader
- java - 启动 JHipster 应用程序不工作:应用程序挂起初始日志并且不启动 [已编辑]
- ios - 如何在每天早上 8 点 30 分调用函数