Articles of dpi

如何以编程方式获取屏幕DPI(Linux,Mac)?

我需要知道Linux和Mac OS上的主动屏幕DPI。 我认为对Linux的xlib可能是有用的,但我无法find一个方法如何得到正确的DPI。 我想这个信息得到真实的屏幕尺寸以英寸。 提前致谢!

当“由应用程序执行缩放”时未收到WM_DPICHANGED

我在Windows 10(1703)下的两个不同DPI的显示器上运行一个程序(称为prog.exe)。 该计划包含: SetThreadDpiAwarenessContext(DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE_V2); CreateWindow(….); prog.exe清单不包含任何引用 <dpiAware>…</dpiAware> 如果prog.exe – >属性 – >兼容性 – >“覆盖高DPI缩放”未选中,则窗口从监视器移到另一个时会收到WM_DPICHANGED,prog.exe可以重新缩放它。 现在,如果选中“Override High DPI Scaling”并将其设置为“由应用程序执行的缩放”,窗口不再接收WM_DPICHANGED(用spy ++确认),所以prog.exe不知道何时需要重新调整它。 这看起来很奇怪:当应用程序执行缩放时,应用程序应该被警告DPI更改! 我的问题的解决scheme可能是简单的:保留“重写高DPI缩放”取消选中,但事情更多:prog.exe(Override High DPI scaling now取消选中)是由xemacs(通过comint)作为subprocess启动的,唯一的让xemacs文本unblurry的方法是将它的兼容性设置为“通过应用程序执行缩放”。 但是它的subprocessprog.exe被认为是PROCESS_PER_MONITOR_DPI_AWARE(由processExplorer确认,并且通过在prog.exe中显示GetProcessDpiAwareness的结果)。 与“覆盖高DPI缩放比例”一样时也是如此。 我也尝试用SetProcessDpiAwareness或SetProcessDpiAwarenessContext来重置prog.exe的dpi意识,但是我得到了一个“访问被拒绝”的错误:合乎逻辑,因为MSDN表示,一旦设置了进程的dpi意识,以后就不能改变。 问题是:如何推出prog.exe与“新鲜的”DPI意识,而不是从其父进程inheritance?

Windows – 在c ++中读取鼠标的dpi设置

有没有办法获得当前鼠标的dpi设置在C + +? 问题是,向系统发送鼠标移动消息将导致不同的光标位置,具体取决于鼠标的dpi分辨率。 编辑: 我发现一个解决scheme,我不需要鼠标的dpi设置。 我用SystemParametersInfo获得鼠标速度,并通过moveDistance.x * 5.0 / mouseSpeed来计算移动距离。 5.0 / mouseSpeed是保证移动距离总是正确的魔术数字。 // get mouse speed int mouseSpeed; mouseSpeed = 0; SystemParametersInfo(SPI_GETMOUSESPEED, 0, &mouseSpeed, 0); // calculate distance to gaze position POINT moveDistance; moveDistance.x = m_lastEyeX – m_centerOfScreen.x; moveDistance.y = m_lastEyeY – m_centerOfScreen.y; // 5.0 / mouseSpeed -> magic numbers, this will halve […]

CComboBoxEx问题与不同的DPI,高度计算

我想在窗体上添加一个CComboBoxEx,但我必须将其与其他控件alignment,并使其高度相同。 问题是,我无法find哪个是正确的方式来获得这个控制的高度。 如果我设置了窗口矩形,会影响下拉列表框。 如果我强制它是一些固定的大小,并且组合内的内容更高,控件会被截断在底部。 有没有一种方法来计算基于图像和当前的DPI设置ComboBoxEx将有多大? 所以我可以至less扩展其他控件,如果我不能调整控件的内部填充。 就我所看过的,MSDN根本不涉及大小问题。

我需要为我的应用程序制作和加载多大的ImageList图标(考虑更高的DPI)?

我有一个CListCtrl控件(或Win32中的ListView ),它是用LVS_REPORT风格创build的。 我打算在其项目中显示图标: 但问题是我需要制作和加载多大的图标? 让我解释。 从旧的Win32示例中,我可以看到每个人都创build了具有15×15像素图标的图像列表。 但与这些问题是,它看起来像任何现代PC具有较高的DPI设置可怕像素化。 因此,我正在寻找一种dynamic的方式来确定适当的CListCtrl图像列表大小。 还有问题的第一部分,我最初应该制作的图标大小是多less? 编辑 PS:由于新闻部伸缩了,你怎么find它? 我目前正在使用以下方法: //No error handling for brevity HDC hDC = ::GetDC(hAppsMainWindowHandle); int nCx = ::GetDeviceCaps(hDC, LOGPIXELSX); int nCy = ::GetDeviceCaps(hDC, LOGPIXELSY); ::ReleaseDC(hAppsMainWindowHandle, hDC); //I technically get horizontal & vertical scaling — //can those be different? double scalingCx = (double)nCx / 96.0; //1.0 = 100% double […]

TD边界不能正确地使用Firefox

在向Firefox dev团队报告错误之前,最好检查一下是否是代码问题。这是一个小table css风格的小提琴 。 CSS非常简单: table { border-collapse: collapse; font-size: 1em; } th { background-color: #a0a0d8; font-weight: bold; width: 20em; } th, td { border: 1px solid #8080b8; padding: 2px; } 可悲的是, 没有任何缩放 ,我得到了不规则的边界显示 。 我犯了一些错误,还是应该报告的问题(没有find关于缩放的报告)? 注意:向前或向后缩放会获得一些系数的边界。 编辑 :这里是HTML请求: <div class="content"> <table id="groups"> <thead> <tr> <th class="groupes">Groupes</th> <th class="action add" title="Ajouter un nouveau groupe">+</th> </tr> […]

GUI故障:checkbox文本在Windows 8中显示不完整

我有一个WinForms应用程序(在Win 7 64x开发)与CheckBox控件。 我已经将我的表单的AutoScaleMode属性设置为“无”。 窗体在我的机器上看起来不错。 但是,当我将程序发送给运行Windows 8的同事时,CheckBox文本显示不完整。 我不确定这个控件的属性是什么造成的。

检测是否不支持DPI的应用程序已被缩放/虚拟化

我试图在WinForms应用程序中检测是否由于操作系统具有较高的DPI而以缩放/虚拟化模式启动。 目前,在一个运行在3840×2400的系统中,具有200%的缩放比例,应用程序将分辨率视为1920×1200,DPI为96,比例因子为1。 我们正在使应用程序DPI知道的过程中,但在那之前,我们需要一个“快速修复”,这将允许我们检测是否缩放。 原因是它在应用程序中打破了屏幕截图的function。 我们在Graphics.CopyFromScreen中使用缩放的尺寸,因为它期望非缩放的尺寸,所以截取了错误的尺寸。 我知道DPI感知设置,但是目前,我们仍然希望应用程序被缩放,但是如果可能的话,能够检测到我们已经缩放并获得了非缩放尺寸。

使用VS2017增强了系统DPI缩放

我有一个MFC应用程序具有默认的MFC DPI支持:它是高DPI的意识,但不是每个监视器DPI的意识。 Windows 10版本1703增加了对系统(增强)DPI缩放的支持 。 我在.exe兼容性设置中从Windows资源pipe理器启用了此模式,并且适用于我的应用程序。 理想情况下,我会使应用程序完全多显示器DPI兼容,但这是相当数量的工作。 相反,如果操作系统支持,我想告诉操作系统对我的应用程序使用系统(增强)DPI缩放。 应用程序的清单是否启用了这个function,如果有的话,需要添加或更改哪些内容? 另外,如何修改清单? 目前,我正在使用默认的Visual Studio 2017 MFC项目结构,在我的项目中没有清单文件。 相反,清单的内容被指定为项目属性,清单是使用mt.exe生成的。 我可以使用mt.exe注入更改吗? 如果我需要用自定义的replace清单,最简单的方法是什么?

如何设置字体到popup式菜单?

我在Windows应用程序中显示popup式菜单时遇到问题。 我没有机会设置它的字体大小。 我需要这样做,例如,当我有两台不同DPI的显示器,并且希望在显示器上显示与DPI不同的DPI时显示菜单。 我创build的应用程序使用每个监视器DPI感知清单。 我知道,在Windows 10中,可以创build一个特定的DPI感知上下文的菜单,所以它将被位图拉伸(在这里find的信息),但我不想拉伸任何东西。 另外,使用System或Unaware DPI Aware Context创build菜单会导致错误的行为,如菜单中的鼠标位置不正确。