首页 > 编程语言 > WinForm程序Dpi感知

WinForm程序Dpi感知

时间:2023-08-08 19:34:38浏览次数:40  
标签:分辨率 程序 Dpi 感知 屏幕 DPI WinForm

目录

本文介绍.NET WinForm程序Dpi感知的相关知识。

一、相关的一些概念

介绍Dpi,分辨率相关的知识。

1、什么是Dpi?

每英寸点数(每英寸长度内的像素点数)。

如标准的Windows DPI(96Dpi),代表1英寸96个像素。

百度百科Dpi介绍

2、1英寸等于多少毫米(mm)?

1英寸=25.4mm=2.54cm

1mm=1/25.4英寸=0.0393700787401575英寸

1cm=10/25.4英寸=0.393700787401575英寸

3、分辨率?

分辨率,又称解析度、解像度,可以细分为显示分辨率图像分辨率打印分辨率扫描分辨率等。

百度百科分辨率介绍

4、屏幕分辨率(显示器分辨率)?

屏幕分辨率是指纵向和横向上的像素点数,单位是px。

屏幕分辨率确定计算机屏幕上显示多少信息的设置,以水平和垂直像素来衡量。就相同大小的屏幕而言,当屏幕分辨率低时(例如 640 x 480),在屏幕上显示的像素少,单个像素尺寸比较大。屏幕分辨率高时(例如 1600 x 1200),在屏幕上显示的像素多,单个像素尺寸比较小。

显示分辨率就是屏幕上显示的像素个数,分辨率160×128的意思是水平方向含有像素数为160个,垂直方向像素数128个。屏幕尺寸一样的情况下,分辨率越高,显示效果就越精细和细腻。

百度百科屏幕分辨率介绍

二、WinForm程序的一些基本知识

本节介绍WinForm程序的一些基本概念。

1、WinFrom程序界面或者控件大小的单位是什么?

是像素,控件的大小以像素为单位。

2、显示器分辨率对WinForm程序有何影响?

在系统缩放比是100%的前提下。

对于同一台显示器不同分辨率而言

对于同一台显示器,通过显示设置来改变系统的分辨率有以下现象。

分辨率越高WinForm程序看起来越小。像素点越密集,WinForm程序看起来越清晰。

分辨率越低WinForm程序看起来越大。像素点越稀疏,WinForm程序看起来越模糊。

可以看作是一张位图,在低像素显示时图片被放大导致图片模糊。

对于相同分辨率不同的显示器而言

小显示器WinForm程序看起来更小,大显示器WinForm程序看起来会更大。

就笔者来看相同分辨率下小显示器的显示效果会更好些,没有找到只有屏幕大小不同时WinForm显示效果是位图缩放还是矢量图缩放的相关的资料,欢迎大家提供相关信息,后面再更新。

附上一篇文章:同一块参数的屏幕,显示同样内容,是不是屏幕小的比屏幕大的更清晰呢?

3、如何更改系统的Dpi值?

在Win7系统中。

img

在Win10系统中

image-20230803192552906

4、在WinForm程序中默认的Dpi感知模式是什么?

桌面应用程序必须告知 Windows 它们是否支持 DPI 缩放。 默认情况下,系统会认为桌面应用程序 DPI 不感知,并按位图拉伸其窗口。

DPI 未识别模式(WinForm程序默认模式)

DPI 感知不到的应用程序以 96 (100% ) 的固定 DPI 值呈现。 每当这些应用程序在显示比例大于 96 DPI 的屏幕上运行时,Windows 会将应用程序位图拉伸到预期的物理大小。 这会导致应用程序出现模糊。

系统 DPI 感知模式

系统DPI感知的桌面应用程序通常在用户登录时接收主连接监视器的DPI。在初始化期间,他们使用System DPI值适当地布局UI(大小控制,选择字体大小,加载资源等)。因此,系统DPI感知应用程序不是DPI缩放(位图拉伸),由Windows在单个DPI上显示。当应用程序移动到具有不同比例因子的显示器时,或者如果显示比例因子以其他方式改变,Windows将位图缩放应用程序的窗口,使它们看起来模糊。实际上,系统DPI感知的桌面应用程序仅在单一显示比例因子下呈现清晰,每当DPI改变时就会变得模糊。

5、如何设置WinForm程序的Dpi感知方式?

1 通过应用程序清单设置

2 通过 API 调用以编程方式

6、WinForm程序中如何获取程序识别到的Dpi?

        var g = this.CreateGraphics();
        var dpiX = g.DpiX;
        var dpiY = g.DpiY;

注意在无应用程序清单文件(.manifest文件)或.manifest文件中未启用Dpi感知时获取到的Dpi值始终是96。

image-20230803200344785

7、不同Dpi下WinForm程序的显示效果

按钮设计时初始大小

image-20230803200829757

系统缩放系数

image-20230803201357770

不启用Dpi感知时的效果图

QQ截图20230803201039

启用Dpi感知后的效果图

QQ截图20230803201139

注意看标签字的清晰度和弹出框中Size的区别,真实图片可以明显感觉到清晰度的差别,上图中可能不明显。

相关参考

1、Windows 上的高 DPI 桌面应用程序开发

2、设置进程的默认 DPI 感知

3、解决C# Winform高DPI字体模糊得两种方案

4、Winform与WPF程序处理DPI问题

标签:分辨率,程序,Dpi,感知,屏幕,DPI,WinForm
From: https://www.cnblogs.com/lanwah/p/17615211.html

相关文章

  • 上位机_Winform系列总结(winform注入sqlsugar)
    1、引入SqlSugar 2、新建SqlSugarConfig类publicclassSqlSugarConfig{privatestaticreadonlystringconnectionString="DataSource=localhost;Database=h2test;UserId=root;Password=root;charset=utf8;port=3306";publicstaticSq......
  • C# winform 实现逐个显示文字
    如题,可以使用timer控件来实现,可以通过设置timer控件属性中的Interval来设置时间间隔(使用VS2019)usingSystem;usingSystem.Diagnostics;usingSystem.Windows.Forms;namespaceTest{publicpartialclassForm3:Form{privateconststringflash="逐个......
  • Winform 富文本框字体高亮
    1.RichTextBox控件-WindowsForms.NETFramework|MicrosoftLearn2.c#代码编辑控件(代码着色控件)ICSharpCode.TextEditor简单应用示例_风雪子郁的博客-CSDN博客3.FastColoredTextBoxforSyntaxHighlighting-CodeProject 展示效果  二:ICSharpCode.TextE......
  • c#串口通信讲解(一)(winform、wpf)
    转载:https://blog.csdn.net/weixin_30466421/article/details/99278174串口操作需要注意的几点如下:1、如果是USB转串口;则需要安装USB转串口驱动,附件有此驱动。2、串口打开状态最好不要直接插拔串口,可能会导致中控板或者串口线烧坏。3、使用串口调试工具CEIWEI,下一章节会贴上......
  • 盘点下4个Winform UI开源控件库
    今天一起来盘点下4个WinformUI开源控件库,有.NetFramework,也有.NetCore。 1、支持.Net7的开源UI组件框架项目简介这是一个基于.NetFramework、.Net6+开发的,WinForm开源UI框架,框架包含常用的控件库、工具类库、扩展类库、单窗口库、多窗口库。默认风格是模仿Element的主......
  • 当编译器没有SetProcessDpiAwareness()这个函数时...
    #include<Shlobj.h>intsetdpi(){//定义一个函数指针类型typedefHRESULT(WINAPI*SetProcessDpiAwarenessFunc)(intvalue);//加载Shcore.dllHMODULEhModule=LoadLibrary("Shcore.dll");if(hModule==NULL){//加载失败......
  • 视频技术与AI感知如何助力生鲜供应链数字化、智慧化?
    一、行业背景近年来,我国肉类、水果、蔬菜、水产品、乳品、速冻食品等生鲜市场需求快速增长,营商环境持续改善,推动冷链物流较快发展,但仍面临不少突出瓶颈和痛点难点卡点问题,难以有效满足市场需求。传统生鲜食材供应链存在诸多弊端,各弊端之间相互牵连,这对全面推进生鲜食材消费升级造成......
  • Winform两个项目间的调用
    Winform1:staticclassProgram   {       ///<summary>       ///应用程序的主入口点。       ///</summary>       [STAThread]       staticvoidMain(string[]args)       {           Application.Ena......
  • .Net设置SplashScreen,在高DPI下不居中的解决方案
    .Net设置SplashScreen,在高DPI下不居中的解决方案根据.Net官方文档,设置图片类型的软件的启动屏幕非常简单,只需要将图片放在工程里,并将图片的生成操作设置为SplashScreen后即可。但是这个办法在高DPI屏幕中没有适应,图片显示的位置不居中,对于强迫症来说会非常非常难受。查......
  • 多层感知机
    #多层感知机#获取数据importd2lzhfrommxnetimportautogradbatch_size=256train_data,test_data=d2lzh.load_data_fashion_mnist(batch_size)#读入数据frommxnetimportndarrayasndnum_input=28*28num_output=10num_hidden=256#中间多......