Tag: dpi

自动缩放但仍处理WM_DPICHANGED

我用C#编写的非常复杂的WinForms应用程序遇到了一些问题。 我希望应用程序在更改DPI时让Windows自动缩放,但我仍然需要挂钩WM_DPICHANGED事件以缩放某些自定义绘制文本。 困境是,如果我离开应用程序DPI没有意识到WM_DPICHANGED消息永远不会在DefWndProc中被截获,并且永远无法检索到正确的DPI标度,而是以我想要的方式“自动缩放”。 但是,如果我使应用程序DPI Aware,则截获WM_DPICHANGED消息并且可以计算正确的DPI,但表单不会“自动缩放”。 正如我所说,应用程序非常复杂并且使用了大量第三方控件,因此我无法花时间在WPF中重写应用程序或尝试自行扩展应用程序。 如何让应用程序拦截WM_DPICHANGED消息,计算正确的DPI并仍然允许Windows管理表单缩放? Program.cs中: static class Program { [STAThread] static void Main() { if (Environment.OSVersion.Version.Major >= 6) { // If the line below is commented out then the app is no longer DPI aware and the // WM_DPICHANGED event will never fire in the DefWndProc of the form int retValue = […]

DPI无法正确缩放

我创建了一个自定义UserControl,其function与numbericUpDown非常相似,但具有各种增强function。 例如,它可以显示分数。 但是,这个控件不能像我的表单上的一些其他控件一样扩展,从而迫使我的UI看起来很尴尬。 我玩了控件和它的父控件的AutoScaleMode。 似乎没有什么工作,但将AutoScaleMode设置为None似乎比其他设置的影响更小。 我还尝试手动减少控件的大小与其旁边的下拉列表相关。 它没用。 我几乎陷入困境,我不知道如何应对这一点。 有什么建议? 我正在为Win7及更高版本启用DPI感知。

如何使用C#以编程方式更改Windows 10显示缩放

我正试图找到一种方法来使用C#以编程方式更改Windows 10中的显示缩放。 我还要说,我不是要创建一个自动强制用户屏幕来改变分辨率/缩放的应用程序。 它只是一个让我能够从托盘切换刻度的工具,这是我经常需要做的测试。 故意为此行动而设计。 因此,当用户通过以下官方对话框手动执行此操作时,我能够跟踪设置的注册表项( HKEY_CURRENT_USER \ Control Panel \ Desktop ): 但是,显然直接使用注册表意味着我需要重启机器才能生效。 我知道您可以使用Pinvoke更改屏幕分辨率: 设置我的显示分辨率 我想知道是否有办法改变给定屏幕的“%”? 即。 我上面的屏幕显示150%,我希望能够通过编程方式将其更改为100-500%的全部范围。

DPI图形屏幕分辨率像素WinForm PrintPageEventArgs

对于运行我的应用程序的任何显示器,Dpi点如何与像素相关? int points; Screen primary; public Form1() { InitializeComponent(); points = -1; primary = null; } void OnPaint(object sender, PaintEventArgs e) { if (points < 0) { points = (int)(e.Graphics.DpiX / 72.0F); // There are 72 points per inch } if (primary == null) { primary = Screen.PrimaryScreen; Console.WriteLine(primary.WorkingArea.Height); Console.WriteLine(primary.WorkingArea.Width); Console.WriteLine(primary.BitsPerPixel); } } 我现在拥有我需要的所有信息吗? 我可以使用上面的任何信息来了解1200像素的长度吗?

DPI在BitmapSource.Create()方法中的相关性是什么?

我阅读了有关DPI的维基百科文章,但它让我更加困惑……我没有关于图像的任何DPI信息。 我应该使用什么DPI与BitmapSource.Create() ,使用常量(96/72?)是否可以,如果我不打算打印图像真的很重要吗?

如何在C#中获取图像的DPI

如何使用asp.net c#获取图像的dpi

更改windows dpi设置C#

我正面临一个与windows的dpi设置有关的问题。 如果windows dpi设置为100%,一切都很好。 但如果用户将其更改为125%…我的应用程序的某些部分显示错误的大小。 我知道问题并且我知道如何处理但是我的客户想要在应用程序运行时,如果当前dpi设置的窗口不等于100% – >将其更改为100% 我现在仍然坚持解决方案。 你有改变windows dpi设置值的解决方案吗? 提前致谢!!!

以高于屏幕分辨率的dpi打印表格

问题: 我们需要帮助来了解如何使用WinForms自动扩展到不同DPI的能力,以允许我们以600dpi而不是屏幕DPI打印我们的表单。 对于你所看到的是什么 – 你得到的打印,我们一直在简单地采用我们精心布置的窗口并打印它(关闭滚动条和按钮等)。 除了一件事之外,它的效果非常好:它出现在96dpi或120dpi(无论屏幕分辨率如何)……其中任何一个都看起来有颗粒感和不专业(我们的客户都在抱怨)。 虽然它与屏幕上的内容一样可读,但您希望打印的文档比屏幕上的内容更具可读性…您希望能够看到更多细节,以便能够阅读较小的文本等。 考虑的替代方案: 鉴于我们的自动缩放工作效果很好,这样我们的窗口在96dpi,120dpi,144 dpi等方面看起来很好,我们希望我们可以在600dpi下绘制窗口,然后打印出来。 或者,我们看到屏幕上的窗口比正常情况下大5-6倍,这样我们就可以像600dpi那样拥有相同的像素数,但是在96或120 dpi ……然后将那个巨大的窗口绘制到300或600的打印页面dpi(无论打印机是什么)。 如果你能告诉我们如何做其中任何一种选择,或者如果你能给我们一个不同的方式来实现我们的目标,那么我们将非常感激它。 当前代码: 如果它很重要,我们的Form包含一个FlowLayoutPanel,它将其他较小的FlowLayoutPanel放入列中,那些较小的FlowLayoutPanels放置一列TextBoxes,RichTextBoxes,第三方RichTextEditor,PictureBoxes和DataGridViews。 我们使用从PrintDocument派生的类来实现OnBeginPrint,OnPrintPage和OnEndPrint。 在OnPrintPage中,它在屏幕外(实际屏幕的右下方)操作我们的普通窗口以适合页面大小,然后请求我们的主面板(顶部FlowLayoutPanel)到DrawToBitmap,然后使用传递给PrintEventArgs的Graphics对象来绘制DrawImage那个位图。 我们还使用Graphics.DrawString将页脚应用于每个页面。 主要代码: using (Bitmap bm = new Bitmap(sz.Width, sz.Height)) { Rectangle rect = new Rectangle(0, 0, sz.Width, sz.Height); mp.DrawToBitmap(bm, rect); e.Graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality; // so footer is anti-aliased e.Graphics.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic; // so when we scale up, […]

C#代码获取已安装或选定打印机的最大dpi

我想获得已安装或选择的打印机的最大Dpi。 我试过了 PrinterSettings ps = new PrinterSettings(); MessageBox.Show(ps.PrinterResolutions.ToString()); 我得到这个输出:System.Drawing.Printing.PrinterSettings + PreinterResolutionCollection(所需的输出是600×600)。

在更高的DPI设置下将Screen.PrimaryScreen.WorkingArea转换为WPF尺寸

我的WPF应用程序中有以下function,用于将窗口调整为主屏幕的工作区域(整个屏幕减去任务栏): private void Window_Loaded(object sender, RoutedEventArgs e) { int theHeight = System.Windows.Forms.Screen.PrimaryScreen.WorkingArea.Height; int theWidth = System.Windows.Forms.Screen.PrimaryScreen.WorkingArea.Width; this.MaxHeight = theHeight; this.MinHeight = theHeight; this.MaxWidth = theWidth; this.MinWidth = theWidth; this.Height = theHeight; this.Width = theWidth; this.Top = 0; this.Left = 0; } 只要机器的DPI设置为100%,这种方法效果很好。 但是,如果他们将DPI设置得更高,那么这不起作用,并且窗口会溢出屏幕。 我意识到这是因为WPF像素与“真实”屏幕像素不同,并且因为我使用WinForms属性来获取屏幕尺寸。 我不知道WPF等效于Screen.PrimaryScreen.WorkingArea。 我可以使用哪些东西,无论DPI设置如何都可以使用? 如果没有,那么我想我需要某种缩放,但我不知道如何确定要缩放多少。 如何修改我的function以考虑不同的DPI设置? 顺便说一下,如果你想知道为什么我需要使用这个函数而不是只是最大化窗口,那是因为它是一个无边框窗口(WindowStyle =“None”),如果你最大化这种类型的窗口,它覆盖了任务栏。