通过Windows PC显示器,我不是指Windows CE或手持设备等.
澄清
下面有些人错误地认为我在询问显示器上的DPI(每英寸点数)是多少.我要求的是GetCaps API调用中LogPixelsX的值:
LOGPIXELSX 沿屏幕宽度每逻辑英寸的像素数.
在我看过的例子中,无论屏幕DPI 如何,它都设置为88 .似乎是一个魔术数字常数.
在一个相关的问题中我使用GetDeviceCaps来计算当前的屏幕字体DPI.我发现的代码示例都有:
Const LOGPIXELSX = 88
对于所有显示器(甚至是宽屏与常规显示器),这普遍相同吗?如果没有,我如何找到当前显示器.(MSDN表示对于特定计算机上的所有监视器都是相同的.
在具有多个显示监视器的系统中,此值对于所有监视器都是相同的.
要回答您对问题的澄清:
LOGPIXELSX是您传递给GetDeviceCaps以获取当前监视器分辨率的参数(技术上是水平分辨率,但所有现代显示器具有相等的水平和垂直分辨率).是的,它总是88 - 如果你想从GetDeviceCaps获得不同的值,你会传递一个不同的值.例如,要获得每个像素的位数,您将传递BITSPIXEL常量12,这些常量常量在Windows API文件WINGDI.h中定义.
MSDN中的注释不是指参数,而是指返回的值.
Windows将始终具有96 DPI的分辨率,除非您在显示设置中更改它.在XP上,您可以在Display Properties-> Settings下的Advanced对话框中找到它; 我不知道它在其他版本的Windows中的位置.
你是正确的,GetDeviceCaps(LOGPIXELSX)将返回DPI,除了一点点警告.从Vista开始,Windows可能会对您的实际配置分辨率撒谎.您需要使应用程序具有DPI感知能力才能获得配置的真实情况.这是一个提供一些细节的Microsoft页面,特别强调Windows 7中的更改.
http://msdn.microsoft.com/en-us/library/dd464659(VS.85).aspx
另一个链接:
http://msdn.microsoft.com/en-us/library/ms701681(VS.85).aspx