Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >wxWidgets 3.1.5 MSW - HiDPI缩放问题导致控件大小不正确

wxWidgets 3.1.5 MSW - HiDPI缩放问题导致控件大小不正确
EN

Stack Overflow用户
提问于 2022-01-31 14:08:46
回答 1查看 216关注 0票数 2

关于我的设置的信息

  • wxWidgets: 3.1.5 (也尝试了github的最新来源)
  • wxWidgets:使用gcc-11.2在msys2 (ucrt64)下构建
  • Windows 10应用程序:在msys2 (ucrt64)下使用gcc-11.2构建
  • 监测本地资源:3840x2160
  • IDE: Eclipse 2021-09

我的问题

如果我构建我的应用程序并针对不使用HiDPI感知清单的资源文件进行链接,那么所有内容都能正常工作,但正如人们所预料的那样,字体是像素化的。但是,一旦我链接到一个HiDPI感知的资源文件,那么控件就不会按照其关联的文本按比例调整大小。请看下面的截图。

上面的图像显示了在没有HiDPI感知资源文件的情况下呈现的测试HiDPI。监视器结垢率为200%。如您所见,wxFrame已正确呈现。

上面的图像显示了在没有HiDPI感知资源文件的情况下呈现的测试HiDPI。监测仪结垢率为350%。如您所见,(除了模糊的文本) wxFrame已正确呈现。

上面的图像显示了正在呈现的测试wxFrame和是一个HiDPI感知的资源文件。监视器结垢率为200%。如您所见,wxFrame呈现得很糟糕。此wxFrame以100%的比例正确呈现。

下面是一个最小的全功能代码示例来演示我的问题。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <wx/wx.h>
#include <wx/frame.h>
#include <wx/sizer.h>
#include <wx/button.h>

class HiDPI_Test: public wxFrame
{
public:
    HiDPI_Test() :
            wxFrame(NULL, wxID_ANY, "HiDPI Test")
    {
        wxBoxSizer *sizer_master = new wxBoxSizer(wxHORIZONTAL);

        m_btn_1 = new wxButton(this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0);
        m_btn_1->SetMinSize(wxSize(-1, 30));
        m_btn_1->SetMaxSize(wxSize(120, 30));
        m_btn_1->SetLabel("Button Label Test");

        m_btn_2 = new wxButton(this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0);
        m_btn_2->SetMinSize(wxSize(-1, 30));
        m_btn_2->SetMaxSize(wxSize(120, 30));
        m_btn_2->SetLabel("Button Label Test");

        sizer_master->Add(m_btn_1, 0, wxALL | wxEXPAND, 0);
        sizer_master->Add(m_btn_2, 0, wxALL | wxEXPAND, 0);

        this->SetSizerAndFit(sizer_master);
        this->Layout();
        this->Centre(wxBOTH);
    }
private:
    wxButton *m_btn_1, *m_btn_2;

};

class HiDPI: public wxApp
{
public:
    bool OnInit() override
    {
        HiDPI_Test *mainApp = new HiDPI_Test();
        mainApp->Show();
        return true;
    }
};

wxIMPLEMENT_APP(HiDPI);

对SetMinSize()和SetMaxSize()的调用对我的总体UI设计至关重要。

我使用以下方法构建了wxWidgets资源文件:

windres --use-temp-file -ires.rc -ores.o -I/home/user/resource -DwxUSE_DPI_AWARE_MANIFEST=2

然后,在构建应用程序时,将生成的对象文件传递给链接器。

重要的是,我的应用程序在wxWidget/GTK3 3 (Linux)和wxWidgets macOS/Cocoa上正确呈现。也就是说,它在macOS和Linux上都能正常工作(没有像素化字体)。

有人知道为什么当我在Windows10上使用HiDPI感知的资源文件时,我的应用程序没有正确呈现吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-02-01 08:40:02

通常使用像素大小是一个非常糟糕的主意,因为这没有考虑到当前的字体大小,所以使用对话单元或者仅仅使用GetTextExtent(“某物”)的结果会更好。

但是,如果您绝对希望使用像素,则至少需要使用FromDIP()将它们转换为适当的单位,有关更多信息,请参见手册中的HiDPI概述

如果你用

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
        m_btn_1->SetMinSize(FromDIP(wxSize(-1, 30)));
        m_btn_1->SetMaxSize(FromDIP(wxSize(120, 30)));

您的代码在200%的缩放中可以正常工作,至少在当前的主版中是这样的(我认为这也适用于3.1.5,但是从那时起已经有了大量与DPI相关的高改进,所以我强烈建议在关心高度DPI支持时使用master/3.1.6 )。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70933410

复制
相关文章
因时区导致的数据创建时间不正确的问题
数据库报错数据时,发现插入的时间总是小于当前时间8个小时,在SpringBoot的配置文件中并没有相关时区配置,h2数据库根据系统时间获取数据,所以初步判断是系统时区设置问题。
关忆北.
2021/12/07
8080
关于GridView控件中设置大小的问题
https://blog.csdn.net/u014737138/article/details/49230207
wust小吴
2019/07/08
1.3K0
CEGUI添加自定义控件[通俗易懂]
用CEGUI做界面将近3个月了,比较忙,而且自己懒了许多,没能像以前那样抽出大量时间研究CEGUI,查阅更多的资料书籍,只是在工作间隙,将官网上的一些资料和同事推荐的《CEGUI深入解析》看了看。
全栈程序员站长
2022/09/15
2.5K0
CEGUI添加自定义控件[通俗易懂]
vue解决字段类型为数字导致单选不正确的问题
最近在研究vue,也试着写一些Vue页面。 vue中,我返回一个值,"sex":0, 单选框代码为
星痕
2018/09/12
2.3K0
Linux 版本 WPS 缩放问题导致字体模糊的解决方法
如果设置了全局缩放, 在 WPS 中可能会出现 UI 中文字清晰, 而正文的文字模糊的情况, 如下图:
Rikka
2022/01/20
2.7K0
Linux 版本 WPS 缩放问题导致字体模糊的解决方法
bootstrap 表单控件大小
<form role="form"> <div class="form-group"> <input class="form-control input-lg" type="text" placeholder=".input-lg"> </div> <div class="form-group"> <input class="form-control" type="text" placeholder="默认输入"> </div> <div class="form-group"> <input class="form-control input-sm" type="text" placeholder=".input-sm"> </div> <div class="form-group"></div> <div class="form-group"> <select class="form-control input-lg"> <option value="">.input-lg</option> </select> </div> <div class="form-group"> <select class="form-control"> <option value="">默认选择</option> </select> </div> <div class="form-group"> <select class="form-control input-sm"> <option value="">.input-sm</option> </select> </div> <div class="row"> <div class="col-lg-2"> <input type="text" class="form-control" placeholder=".col-lg-2"> </div> <div class="col-lg-3"> <input type="text" class="form-control" placeholder=".col-lg-3"> </div> <div class="col-lg-4"> <input type="text" class="form-control" placeholder=".col-lg-4"> </div> </div> </form>
用户5760343
2019/07/07
1.2K0
更改文字、图片和视频大小(缩放)
您可以更改所访问网页中所有内容(包括文字、图片和视频)的大小,也可以仅更改字体大小。
全栈程序员站长
2022/07/11
2.2K0
更改文字、图片和视频大小(缩放)
mac 开启hidpi_开启hidpi的缺点
在macOS10.15之后,系统中存放DisplayProductID和DisplayVendorID的文件夹Overrides变为只读,若有些tool开HiDPI遇到一些麻烦或失灵的情况,可参考下文用one-key-hidpi的简易方法,具体如下:
全栈程序员站长
2022/08/03
3.5K0
mac 开启hidpi_开启hidpi的缺点
win10控件安装不了_控件未安装或安装不正确
有关 VCL 控件的常见问题 (安装、卸载、升级BCB版本等) 控件安装 (*.BPL) 1.选择 BCB 菜单 File→Close All (关闭所有文件) 选择BCB 菜单: Project→Options→Packages→Add, 选择 *.bpl 文件, 然后按“打开”按钮
全栈程序员站长
2022/09/29
3.3K0
UIImage 图片处理:截图,缩放,设定大小,存储
图片的处理大概分 截图(capture), 缩放(scale), 设定大小(resize), 存储(save)
周希
2019/10/15
2.2K0
mac开启HiDPI
不只是黑苹果需要开启hidpi,白苹果外接非4k显示屏的时候默认也是不开启hidpi的,显示效果不佳,颗粒感严重
列夫托尔斯昊
2021/02/02
2.1K0
Win8中缩放视图(SemanticZoom控件)
    SemanticZoom控件可以让用户缩放具有相同内容的两个不同视图。其中有一个是主视图。另外一个视图可以让用户进行快速导航。例如,当用户查看地址簿时,用户可以放大某个字母以查看与该字母相关的内容。还有其他等等的一些例子。
aehyok
2018/09/11
1.3K0
Win8中缩放视图(SemanticZoom控件)
3.1.5 内存管理
在单道批处理系统阶段,一个系统一个时间段内只执行一个程序,内存的分配及其简单,仅分配给当前运行进程即可。而引入了多道程序并发执行之后,进程之间共享的不仅仅是处理机,还有主存储器。然而, 共享主存会形成一些特殊的挑战。如果不对内存进行管理,容易导致内存数据的混乱,以至于限制进程的并发 执行。所以为了更好地支持多道程序并发执行,必须要进行内存 管理。
week
2018/08/27
3050
wpf 控件大小随窗体大小改变而改变
WPF可以直接通过设置图形类控件的水平和垂直Alighment为Stretch实现 用一个ViewBox装上所有的Window内容然后当window缩放时就可以一起放大缩小了 ViewBox的显示机制是,先在内存中把按照逻辑大小把子控件显示出来,然后等比例的缩放显示到ViewBox的客户区 例: Button btn = new Button(); btn.HorizontalAlignment = System.Windows.HorizontalAlignment.Stretch; btn.Vertic
hbbliyong
2018/03/06
3.4K0
macOS开启HIDPI解决自定分辨率显示模糊问题
作者:matrix 被围观: 8,685 次 发布时间:2019-02-13 分类:零零星星 | 6 条评论 »
HHTjim 部落格
2022/09/26
1.6K0
macOS开启HIDPI解决自定分辨率显示模糊问题
点击加载更多

相似问题

Java Swing HiDPI缩放

10

wxWidgets 3.0 - MSW应用程序构建不能正常启动

16

WxWidgets wx/msw/图书馆员H:找不到

12

在HiDPI中直接缩放画布与缩放CSS

13

删除控件wxWidgets

20
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文