首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在每个显示器的DPI感知应用程序中获得正确的System.Drawing.Graphics上的DPI?

在每个显示器的DPI感知应用程序中获得正确的System.Drawing.Graphics上的DPI,可以通过以下步骤实现:

  1. 获取当前显示器的DPI:
    • 使用System.Windows.Forms.Screen类的AllScreens属性获取所有连接的显示器。
    • 遍历每个显示器,使用System.Windows.Forms.Screen类的GetDpiX和GetDpiY方法获取水平和垂直方向的DPI值。
  • 创建Graphics对象并设置DPI:
    • 使用System.Drawing.Graphics类的FromHwnd方法,传入应用程序主窗口的句柄获取Graphics对象。
    • 使用Graphics对象的DpiX和DpiY属性,将步骤1中获取的DPI值设置给Graphics对象。

以下是一个示例代码,演示如何在C#中实现上述步骤:

代码语言:txt
复制
using System;
using System.Drawing;
using System.Windows.Forms;

namespace DPIAwareApp
{
    public partial class MainForm : Form
    {
        public MainForm()
        {
            InitializeComponent();
        }

        private void MainForm_Load(object sender, EventArgs e)
        {
            // 获取所有显示器
            Screen[] screens = Screen.AllScreens;

            foreach (Screen screen in screens)
            {
                // 获取每个显示器的DPI
                float dpiX = screen.GetDpiX();
                float dpiY = screen.GetDpiY();

                // 创建Graphics对象并设置DPI
                IntPtr hdc = screen.GetHdc();
                using (Graphics graphics = Graphics.FromHdc(hdc))
                {
                    graphics.DpiX = dpiX;
                    graphics.DpiY = dpiY;

                    // 在这里进行绘图操作,使用正确的DPI
                    // ...
                }
                screen.ReleaseHdc(hdc);
            }
        }
    }
}

这样,你就可以在每个显示器的DPI感知应用程序中获得正确的System.Drawing.Graphics上的DPI。对于更详细的了解和使用,你可以参考腾讯云的云计算产品文档:System.Drawing.Graphics类 - DPI感知应用程序

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

【QT】获取主屏幕DPI

在Windows操作系统DPI感知DPI Awareness)是指应用程序能够感知到屏幕DPI设置,并根据DPI值调整其界面元素大小和布局,以提供更好用户体验。...每个监视器DPI感知(Per Monitor)每个监视器DPI感知是指应用程序能够检测到每个显示器DPI设置,并根据每个显示器DPI值分别调整其界面元素大小和布局。...这种模式下,当用户在不同DPI设置显示器之间移动应用程序窗口时,应用程序界面会自动适应每个显示器DPI设置。...注意事项在实现DPI感知时,需要确保应用程序界面元素能够正确地缩放,以避免在高DPI设置下出现模糊或过小情况。...在使用每个监视器DPI感知时,需要注意处理不同显示器之间DPI变化,以确保应用程序界面在不同显示器之间保持一致。

21810

将浏览器嵌入 .NET 应用程序:DotNetBrowser 还是 CefSharp?

这种方法总体简化了 UI 创建并节省了大量时间和精力。 CefSharp 提供有限设计器支持[12]。如果应用程序本身以 x86 为目标,则其控件将在设计器中正确处理。...高DPI 在 CefSharp ,浏览器子进程默认 DPI 感知[16]是 Per-Monitor。...因此,桌面应用程序应具备DPI 感知功能[17],才能在高 DPI 显示器DPI 比例设置大于 100% 显示器正确运行。...在初始化过程,它会检查当前进程 DPI 感知,并为相应 Chromium 引擎设置匹配 DPI 感知。因此,无需让您应用程序显式识别 DPI 以避免在高 DPI 显示呈现伪影。...例如,以下是如何在 DotNetBrowser 网页执行相同操作: 因此,在 DotNetBrowser 与网页执行复杂交互要方便得多。

54440
  • Windows 下DPI 应用开发(UWP WPF Windows Forms Win32)

    ▲ 自定义 DPI 设置 自 Windows 8.1 开始,操作系统开始可以设置不同屏幕 DPI 值了: ▲ Windows 10 多个屏幕选择 ▲ Windows 10 针对每个屏幕...系统级感知 (System DPI Awareness) Vista 系统引入。 所有显示器应用共用这一个 DPI 值。...而 Per-Monitor V1 和 Per-Monitor V2 支持在操作系统级别是兼容,所以只需要修改 WPF 应用程序清单即可兼容第二代屏幕级 DPI 感知。...其他 UI 框架 原生 Win32 是支持最新 DPI 感知,其他 GDI/GDI+/MFC 等都不支持,除非开发者手工编写。...但实际更早 Windows 10 (1607) 就引入了相关 API,包括 SetThreadDpiAwarenessContext 和 PerMonitorV2 应用程序清单。

    85750

    将浏览器嵌入 .NET 应用程序:DotNetBrowser 还是 CefSharp?

    这种方法总体简化了 UI 创建并节省了大量时间和精力。 CefSharp 提供有限设计器支持[12]。如果应用程序本身以 x86 为目标,则其控件将在设计器中正确处理。...高DPI 在 CefSharp ,浏览器子进程 默认 DPI 感知[16] 是 Per-Monitor。...因此,桌面应用程序应具备 DPI 感知功能,才能在高 DPI 显示器DPI 比例设置大于 100% 显示器正确运行。...在初始化过程,它会检查当前进程 DPI 感知,并为相应 Chromium 引擎设置匹配 DPI 感知。因此,无需让您应用程序显式识别 DPI 以避免在高 DPI 显示呈现伪影。...例如,以下是如何在 DotNetBrowser 网页执行相同操作: DotNetBrowserDom.cs IDocument document = browser.MainFrame.Document

    54120

    Windows 系统使用任务管理器查看进程各项属性(命令行、DPI、管理员权限等)

    关于运行期间改名,可以参见: Windows 应用程序在运行期间可以给自己改名(可以做 OTA 自我更新) - 吕毅。...使用 Visual Studio 自定义外部命令 (External Tools) 快速打开 git bash 等各种工具 - 吕毅 关于命令行路径,可以参见我其他博客: .NET 命令行参数包含应用程序路径吗...UAC 虚拟化相关问题可以阅读 应用程序清单 Manifest 各种 UAC 权限级别的含义和效果 - 吕毅。 DPI 感知 可以查看进程 DPI 感知级别。...进程 DPI 感知级别有以下这些,名字来源于 Windows 系统任务管理器显示名称。...不知道 (Unaware) 系统 (System DPI Awareness) 每个显示器 (Per-Monitor DPI Awareness) 每个显示器(v2) (Per-Monitor V2 DPI

    3.9K40

    Windows微信DPI适配

    2.2 DPI和缩放比例关系 现在我们已经知道DPI是个什么了,那么DPI又是怎样影响我们应用程序界面的呢?...现在显示一张分辨率为1920*1080图片,在显示器A,得到效果如下: ? 图片是刚好撑满了整个显示器。 在显示器B,得到效果如下: ?...同样图片,在显示器B只占用了1/4面积屏幕。 BDPI是A2倍,在默认处理下,实际显示效果是:图片在A显示宽和高分别是B2倍。...这个时候就我们在需要在高DPI设备放大我们界面元素,在低DPI设备缩小我们界面元素,使用户在不同设备看到内容大小基本一致。 上面例子我们是使用面板DPI来举例子。...3.1 声明DPI感知级别 适配应用,首先我们需要声明我们应用是DPI感知级别的。

    5.8K90

    mfc控件工具栏怎么打开_Qt界面库

    此版本包括对每个显示器 DPI 感知支持、改进信息框和桌面警报控件、主题编辑框气球工具提示和其他新功能和改进。...当您移动窗格以使用不同DPI显示时,图标将自动重新缩放。 2. CBCGPCaptionButton:向类构造函数添加了新可选参数 CWnd* pWndParent(DPI 感知应用程序需要)。...CBCGPBaseVisualCtrl(所有仪表控件类基类):当 DPI 更改或窗口移动到具有不同 DPI 另一个监视器时,将调用新虚拟方法 OnDPIChanged。...当主应用程序窗口移动到以其他比例 (DPI) 显示时,框架会调用此方法。 3. 信息框:改进了一些视觉主题中默认颜色(见截图)。 版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。...发现本站有涉嫌侵权/违法违规内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

    1.2K40

    WindowsXamlHost:在 WPF 中使用 UWP 控件(Windows Community Toolkit)

    SDK 版本( 16299,17763 等) Windows.Foundation.UniversalApiContract 在此目录下选择你 API 版本( 4.0.0.0...添加到你 WPF 界面: 拖拽到界面设计器 拖拽到 XAML 代码行 直接在 XAML 代码写 ?...关于 DPI 适配 为了让 UWP 控件能够在 WPF 窗口中获得正确 Per-Monitor DPI 适配效果,你需要设置为 PerMonitorV2 DPI 感知级别。...在 PerMonitorV2 DPI 感知级别下,UWP 控件能够正常获得 DPI 缩放。 在 100% DPI 屏幕下: ? 在 150% DPI 屏幕下: ?...关于如何在 WPF 下开启 PerMonitorV2 级别的 DPI 感知可以参见: 支持 Windows 10 最新 PerMonitorV2 特性 WPF 多屏高 DPI 应用开发 - walterlv

    4.7K20

    【说站】Win11双显示器任务栏怎么设置都显示时间? 双屏显示两个任务栏技巧

    有一些朋友使用双屏幕,但是发现在副屏不能显示时间,想知道有什么方法可以让第二个屏幕显示时间,下面介绍如何在Windows11第二台显示器上将时间和日期添加到任务栏。...选择多个显示器。 方法二:加入Windows预览体验计划 如果您想将时间和日期添加到Windows11第二台显示器任务栏,我们会说这是最简单选择。...这个应用程序可以在你所有的显示器添加时间和日期,但如果你有兴趣,它还可以做更多事情。 您需要做就是从GitHub下载最新版本ElevenClock并运行安装程序。...在 HiDPi 显示器(100%、200%、300%)和分数 HiDPI 显示器(125%、150%、175%、250% 等)正确对齐和大小。...在不同比例显示器正确对齐和大小(显示 1:100%、显示 2:150%、显示 3:225% 等)。 当(断开)连接显示器时,时钟也会自动调整。 收藏 | 0点赞 | 0打赏

    3.9K20

    DietPi配置问题(2)

    在Pi Zero,有一个标有“ TV”未填充标题,用于输出复合视频。在计算模块,可通过TVDAC引脚获得复合视频。...hdmi_edid_file 设置hdmi_edid_file为1将会导致GPU从edid.dat引导分区文件读取EDID数据,而不是从监视器读取。可在此处获得更多信息。...通过从受支持应用程序(例如,omxplayer)中选择其显示编号,仍可以使用LCD。 lcd_framerate 指定Raspberry Pi LCD显示器帧速率,以赫兹/帧/秒为单位。...disable_touchscreen=1 将在正式Raspberry Pi LCD显示屏禁用触摸屏。 enable_dpi_lcd 启用连接到DPI GPIOLCD显示。...dpi_group,dpi_mode,dpi_output_format dpi_group和dpi_modeconfig.txt参数用于集合是预定模式(DMT或CEA模式以上13759 HDMI

    1.4K30

    支持 Windows 10 最新 PerMonitorV2 特性 WPF 多屏高 DPI 应用开发

    添加应用程序清单文件 在你现有 WPF 项目的主项目中需要添加两个文件以支持第二代多屏 DPI 机制。...image.png ▲ 新建文件时候选择应用程序清单文件(应用程序配置文件就在旁边) 了解 WPF 清单文件 DPI 感知设置 DpiAware 在你打开了 app.manifest 文件后,找到以下代码...DPI 感知清单设置,开启后获得系统 DPI 感知级别(System DPI Awareness)。...以上,划重点 你并不需要编译为高版本 .NET Framework 即可获得 Per-Monitor DPI 缩放支持。...使用以上 DPI 缩放方法足以让你 WPF 应用在任何一个 .NET Framework 版本下获得针对屏幕 DPI 清晰缩放(Per-Monitor DPI Awareness)。

    1.7K31

    准确判断一个 WPF 控件 UI 元素当前是否显示在屏幕内

    如果用户有多台显示器,而且大小还不一样,那么依前面的判定方法,下图中 C 控件虽然人眼看在屏幕外,但计算所得是在屏幕内。 更复杂,是多台显示器还不同 DPI 时,等效屏幕尺寸计算更加复杂。...如果是 SDK 风格项目,则在 csproj 添加如下代码: 1 2 3 4 5 6 7 8 9 10 <Project Sdk="Microsoft.NET.Sdk.WindowsDesktop"...关于 DPI 感知设置问题,可阅读我其他博客: Windows 下DPI 应用开发(UWP / WPF / Windows Forms / Win32) - walterlv 支持 Windows...10 最新 PerMonitorV2 特性 WPF 多屏高 DPI 应用开发 - walterlv Windows 系统使用任务管理器查看进程各项属性(命令行、DPI、管理员权限等) - walterlv...✔️ 多屏有不同 DPI(WPF 感知系统 DPI) ❌ ❌ ✔️ 多屏有不同 DPI(WPF 感知屏幕 DPI) ❌ ❌ ✔️ 多屏有不同 DPI(WPF 感知屏幕 DPI V2) ❌ ❌ ✔️ 纯

    66240

    CefSharp中文帮助文档「建议收藏」

    显示/支持 WinForms/WPF需要使使用DPI桌面应用程序能够在高DPI显示器DPI Scale设置大于显示器正确运行DPI100%。...注意如果鼠标光标在浏览器位置不正确,或者浏览器显示带有渲染/调整大小黑框/边框,则需要制作您应用程序DPI Aware。应用程序其他部分也可能会显得模糊或尺寸不正确。...以下示例是Win 10 1703及更高版本PerMonitor DPI Aware和旧版本PerMonitor DPI感知。...WPF高DPI 应用清单 添加相关条目,请参阅app.manifest针对Microsoft建议打开Windows级每个监视器DPI感知。...f=6&t=15120#p34802建议,现在看来有必要在32位应用程序运行时在应用程序可执行文件设置“大地址感知”链接器设置。遇到高内存负载。

    13.2K31

    Android分辨率

    对于应用程序来说,系统平台向它们提供是一个稳定,跨平台运行环境,而关于如何将程序以正确方式显示到它所运行平台上所需要大部分技术细节,都由系统本身进行了处理,无需程序干预。...这个文档会说明系统平台究竟提供了哪些分辨率支持特性,与它们如何在程序中使用信息。如果你遵循文档列出方法,就很容易让你程序在所有支持分辨率下都能完美显示。...特别的,如果你有一个已经完成程序,又想让它可以在超低分辨率设备(比如320×240)正确运行,你需要阅读“老程序更新策略”,那篇文档会告诉你应该怎么做。...例如,定义一个宽度为300像素表单字段,列之间间距为5个像素,图标大小为16×16像素等。这样处理问题在于,如果在一个每英寸点数(dpi)更高显示器运行该程序,则用户界面会显得很小。...是说,以160dpi为标准,在一个160dpi屏幕1个物理像素作为设备无关像素1个像素,也就是Android最佳实践推荐dip/dp(以下这两个单位表示同样含义,dip常见于Google官方示例

    1.2K20

    谈谈DPI、分辨率与缇

    这就引发了下一个问题,屏幕1像素打印出来到底是多大。可以注意到是像素本身是不跟现实物理量有什么联系,但是有一个东西是有联系,那就是 DPI,将英寸和像素联系起来了。...所以就把屏幕分辨率也串起来了 这里以一个 23寸,屏幕分辨率为 1920*1080显示器 为例:sqrt(1920^2^+1080^2^) / 23 ≈ 95.77 ≈ 96。...总结 缇是一个绝对概念,无论在地球哪个地方,缇长度都是绝对DPI 是一个可以自己设置,每英寸像素数;屏幕分辨率也是可以自己设置,代表了屏幕像素点数。...DPI 有什么用 屏幕 DPI 对于客户端开发来说,在系统层面,是无法准确知道用户电脑屏幕是多大,对于客户端,只能感知屏幕有多少个像素。...对于在电脑显示图片大多数软件来说,修改 DPI 是不影响图片在软件里看到大小,因为它像素没有变。

    1.3K40

    详解深度数据包检测 (DPI) 技术

    DPI和传统包过滤有什么区别? 网络每个数据包都有一个包头,其中包含关于其发送者、接收者和传输时间基本信息。使用传统数据包过滤只能读取到此信息。...下面列出了网络管理深度包检测一些主要方法: 匹配模式/签名 每个数据包都由具有入侵检测系统 (IDS) 功能防火墙针对已知网络攻击数据库进行匹配检查。...在云/ SDN隐含动态服务环境,由于对CPU资源高要求,DPI可能会与网络设备(作为运行在虚拟交换机软件)或在控制层(在应用程序和交换机之间控制器)共存。...由于大多数网络流量很大,DPI 通常根据网络运营商预定义标准,由软件自动执行。...由于它被用作入侵检测系统 (IDS) 和入侵防御系统 (IPS) 组件,因此近年来DPI应用越来越广泛。DPI 通常作为一项功能包含在安全设备,或者在服务器设置为虚拟 DPI

    4.6K60

    CSS文字大小单位px、em、pt(转)

    当前对行内文本字体尺寸未被人为设置,则相对于浏览器默认字体尺寸。...因为我们显示器被分割为了一个个像素,单个像素只能有一种颜色 (为了简化,这里暂不讨论次像素反锯齿技术),要在屏幕显示,必须先把以 pt 为单位长度转换为以像素为单位长度,这个转换媒介,就是...DPI (事实,这里所谓 DPI,是操作系统和浏览器中使用术语,即为 PPI, pixels per inch,和扫描仪、打印机、数码相机 DPI 是不同概念)。   ...例如,无论在哪个操作系统,Firefox 浏览器默认 DPI 都是 96,那么实际 9pt = 9 * 1/72 * 96 = 12px。   ...请拿出一把尺子,丈量你显示器可见宽度 (我这里是 11.2992 英寸),除以横向分辨率 (我这里是 1024 像素),得到就是每个像素物理长度。

    1.6K20
    领券