GetDeviceCaps()

转载 2012年03月21日 06:49:18
DC::GetDeviceCaps()物理长度与屏幕像素间的转换

作用:
读取DC的一些打印区域信息,主要是像素和英寸方面的数据.

声明:
GetDeviceCaps(int )

使用例子:
//所有像素数
int pagecx=dc.GetDeviceCaps(HORZRES);
int pagecy=dc.GetDeviceCaps(VERTRES);

//即每英寸点数
short cxInch = dc.GetDeviceCaps(LOGPIXELSX);
short cyInch = dc.GetDeviceCaps(LOGPIXELSY);

// 计算一个设备单位等于多少0.1mm
double scaleX = 254.0 / (double)GetDeviceCaps(dc.m_hAttribDC,LOGPIXELSX);
double scaleY = 254.0 / (double)GetDeviceCaps(dc.m_hAttribDC, LOGPIXELSY);


说明:
主要用到的参数见例子中的:HORZRES,VERTRES,LOGPIXELSX,LOGPIXELSY.总的来说是为了方便控制打印或重画时的控制,如为了定制打印时,一般依据的是物理的长度,而不是像素,而DC一般是用像素的映射模式,所以需要一下转换,上面这个函数就为这种转换设计的.

GDI中有一个函数是GetDeviceCaps(),可以获取一些关于设备的一些属性,如HORZSIZE/HORZRES/LOGPIXELSX等。
    以上三者的关系通常满足:HORZSIZE = 25.4 * HORZRES/LOGPIXELSX
    HORZSIZE为屏幕水平尺寸(定为度量尺寸,以mm计),HORZRES为水平的像素总数(定为像素大小,平时所说的屏幕分辨率,但在这不这么称呼。这里,分辨率定为“每英寸的像素数”),LOGPIXELSX为逻辑像素(假设的每英寸的像素数,并不是刚才所说的实际的“分辨率”)。因此HORZSIZE也称为逻辑宽度。
    当我们选择“显示”属性里的大字体时,LOGPIXELSX(通常分为96dpi与120dpi)变大了,这样假设原来的字体为10磅,则原来的字体横向所占像素(实际所占的像素数)为10*(1/72)*LOGPIXELSX,现在LOGPIXELSX变大了,则字体所占像素也大了,因此看起来字体大了。如果HORZRES不变的话,则HORZSIZE应该变小。然后这是和Windows有关的,在16位OS中,HORZSIZE值是固定的。
    在XP系统上验证了一下,发现HORZSIZE值与LOGPIXELSX的值也是不变的,如果改变HORZRES的话,则HORZSIZE会发生相应变化,但LOGPIXELSX不变,一直是96。
    验证数值是:当HORZRES/VERTRES分别为800/600、1280/1024、1360/768时,LOGPIXELSX/LOGPIXELSY一直为96,但HORZSIZE/VERTSIZE分别为320/240、375/300、400/320。于是个人断定:LOGPIXELSX/LOGPIXELSY与所选的字体(如TrueType)有关,windows默认的字体LOGPIXELSX/LOGPIXELSY值是定的,选大字体或小字体取它们的值都是一样的,而一些字体是不同的。而HORZSIZE/VERTSIZE与系统版本有关,在有的系统中,这两个值是适合此分辨率的标准显示器的尺寸(定值,长宽比与分辨率的比一样),不是通过公式计算的,也不等于公式计算的值;而有的系统版本这两个值为公式所得的值。
    下边是petzold那本书上的两句(没摘英文的):“

然而,在Windows NT中,用老的方法定义HORZSIZE和VERTSIZE值。这种方法与Windows的16位版本一致。HORZRES和VERTRES值仍然表示水平和垂直图素的数值,LOGPIXELSX和LOGPIXELSY仍然与在「控制台」的「显示器」程序中选择的字体有关。在Windows 98中,LOGPIXELSX和LOGPIXELSY的典型值是96和120 dpi,这取决于您选择的是小字体还是大字体。

在Windows NT中的区别是HORZSIZE和VERTSIZE值固定表示标准显示器大小。对于普通的显示卡,取得的HORZSIZE和VERTSIZE值分别是320和240毫米。这些值是相同的,与选择的图素大小无关。因此,这些值与用HORZRES、VERTRES、LOGPIXELSX和LOGPIXELSY索引从GetDeviceCaps中得到的值不同。然而,可以用前面的公式计算在Windows 98下的HORZSIZE和VERTSIZE值。


获取屏幕大小第三篇 物理大小GetDeviceCaps 下(英寸和像素转换-2540)

获取屏幕大小第三篇 物理大小GetDeviceCaps 下

GetDeviceCaps获取与修改显示器属性

int pixelxperinch = dc.GetDeviceCaps(LOGPIXELSX);//每英寸水平逻辑像素数 int pixelyperinch = dc.GetDeviceCaps(L...
  • hczhiyue
  • hczhiyue
  • 2011年09月07日 16:37
  • 10777

VC++获取屏幕大小第二篇 物理大小GetDeviceCaps 上

上一篇《VC++获取屏幕大小第一篇像素大小GetSystemMetrics》中介绍了使用GetSystemMetrics函数来获取屏幕的像素大小,本篇将介绍使用GetDeviceCaps函数来获取屏幕...

GetDeviceCaps WinAPI

GetDeviceCaps这个函数可以访问使用设备描述表的设备数据,应用程序指定相应设备描述表的句柄和说明该函数访问数据类型的索引来访问这些数据。 根据指定设备场景代表的设备的功能返回信息   ...
  • xbsoul
  • xbsoul
  • 2016年08月04日 16:33
  • 466

GetSystemMetrics与GetDeviceCaps

要获取屏幕的像素大小要使用GetSystemMetrics函数。下面就来看看这个函数的用法:函数功能:用于得到被定义的系统数据或者系统配置信息...

GetDeviceCaps(hDC, BITSPIXEL)

获取系统的颜色位数     GetDeviceCaps(hDC, BITSPIXEL)参考资料GetDeviceCaps  函数功能:该函数检索指定设备的设备指定信息。  函数原型:int GetDe...

VC++获取屏幕大小第三篇 物理大小GetDeviceCaps 下

本篇文章(MoreWindows)将获取屏幕的物理大小后计算屏幕对角线长度并换算成英寸。这样可以方便大家查看自己电脑屏幕是多少英寸的。为了更方便大家使用,本文将提供电脑屏幕大小查看器下载(配源码)下载...

GetDeviceCaps

  • 2014年07月14日 14:54
  • 5.91MB
  • 下载

MFC Windows 程序设计->GetDeviceCaps

CDC::GetDeviceCapsint GetDeviceCaps(int nIndex) const;返回值:如果成功,则返回所需要的能力值。参数:nIndex指定返回信息类型,可为下列值之一:...
  • problc
  • problc
  • 2011年04月02日 16:54
  • 923

GetDeviceCaps访问使用设备描述表的设备数据

函数功能:该函数检索指定设备的设备指定信息。   函数原型:int GetDeviceCaps(HDC hdc, int nlndex); 1、hdc:设备上下文环境的句柄。 2、nIn...
  • zmq5411
  • zmq5411
  • 2011年09月07日 11:26
  • 1147
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:GetDeviceCaps()
举报原因:
原因补充:

(最多只允许输入30个字)