【转载】http://blog.sina.com.cn/s/blog_638dd78201018663.html

函数原型:int GetDeviceCaps(int nIndex);

常用的参数有(参考MSDN):

int iHORZSIZE=pDC->GetDeviceCaps(HORZSIZE); // 得到当前显示设备的水平大小(毫米)

int iVERTSIZE=pDC->GetDeviceCaps(VERTSIZE);// 得到当前显示设备的垂直大小(毫米)

int iHORZRES=pDC->GetDeviceCaps(HORZRES);// 得到当前显示设备的水平像素数

int iVERTRES=pDC->GetDeviceCaps(VERTRES);// 得到当前显示设备的垂直像素数

int iLOGPIXELSX=pDC->GetDeviceCaps(LOGPIXELSX);// 得到当前显示设备的水平单位英寸像素数

int iLOGPIXELSY=pDC->GetDeviceCaps(LOGPIXELSY);// 得到当前显示设备的垂直单位英寸像素数

int iPHYSICALWIDTH=pDC->GetDeviceCaps(PHYSICALWIDTH);// 得到当前打印设备的水平大小(毫米)

int iPHYSICALHEIGHT=pDC->GetDeviceCaps(PHYSICALHEIGHT);// 得到当前打印设备的水平大小(毫米)

验证结果:

1.对于打印设备来说完全正确,可以利用上述参数在打印时得到与实际尺寸一致的结果。

2.对于打印设备来说上面的三组参数存在运算关系

iHORZSIZE=iHORZRES*25.4/iLOGPIXELSX;

iVERTSIZE=iVERTRES*25.4/iLOGPIXELSY;

3.对于显示设备来说,LOGPIXELSX和LOGPIXELSY得到的结果和Windows设置的字体有关,100%时为96dpi,150%时为144dpi。

4.至少对我目前的笔记本显示器来说,上述函数调用得到结果只有iHORZRES和iVERTRES是准确的,LOGPIXELSX和LOGPIXELSY为96(我设置的是正常字体),而iHORZSIZE和iVERTSIZE似乎是用72dpi计算出来的:

iHORZSIZE=iHORZRES*25.4/72;

iVERTSIZE=iVERTRES*25.4/72;

不知这个72dpi从何而来

5.对我的笔记本显示器,经验证,改变分辨率和windows字体大小时,3和4的结论都正确,72dpi不变

6.PHYSICALWIDTH和PHYSICALHEIGHT这组参数,只对打印设备有效,得到是当前打印机纸张的全部像素数,而iHORZRES和iVERTRES得到的都是可打印范围的像素数,对显示设备这组参数返回值为0

7.Google结果显示可用读注册表中显示器的EDID信息得到显示器的物理尺寸,比较复杂,研究中

【转载】VC GDI 像素转厘米(英寸)的更多相关文章

  1. VC GDI 像素转厘米(英寸)[转发]

    [转载]http://blog.sina.com.cn/s/blog_638dd78201018663.html 函数原型:int GetDeviceCaps(int nIndex); 常用的参数有( ...

  2. 转载 VC 2010下安装OpenCV2.4.4

    说明: 1.安装平台:32位XP,VS2010: 2.OpenCV 2.4.4不支持VC 6.0: 3.网上有很多用CMake编译OpenCV的安装教程,这里建议先不要自己编译,如果使用预编译好的库有 ...

  3. 【转载】GDI 映像方式 之 SetViewportExtEx 与 SetWindowExtEx 解析

    所谓视口代表设备,比如屏幕. 窗口代表我们的思维. 我们对windows说在(5,6)处画个点(调用GDI函数).windows认为是在我们的思维的(5,6)处画了个点.(也就是说5,6是逻辑坐标,G ...

  4. 【转载】gdi+ 内存泄漏

    [转载]http://issf.blog.163.com/blog/static/1941290822009111894413472/ 最近用GDI+实现了几个自定义控件,但是发现存在内存泄露问题 B ...

  5. (转载)解决GDI闪烁

    一般的windows 复杂的界面需要使用多层窗口而且要用贴图来美化,所以不可避免在窗口移动或者改变大小的时候出现闪烁. 先来谈谈闪烁产生的原因 原因一:如果熟悉显卡原理的话,调用GDI函数向屏幕输出的 ...

  6. 【转载】GDI 映像方式 之 SetViewportOrgEx 与 SetWindowOrgEx 解析

    SetViewportOrgEx 与 SetWindowOrgEx 解析 这两个函数,用来改变视端口和窗口的原点,并都具有改变轴的效果,以致(0,0)不再指左上角. 「视端口」是依据设备坐标(图素)的 ...

  7. (转载)C# GDI+ 画简单的图形:直线、矩形、扇形等

    GDI+是一种绘图装置接口, 当拖动窗体是,窗体发生移动,window默认为从窗体移动到另一个地方,先发生擦除后再重新画一个窗体: 而我们自己动手画的图(如下面的线),不会重新画:在属性中,Paint ...

  8. 转载 VC轻松解析XML文件 - CMarkup类的使用方法

    VC轻松解析XML文件 - CMarkup类的使用方法http://www.cctry.com/thread-3866-1-1.html VC解析XML文件的工具有很多,CMarkup, tinyXM ...

  9. GDI 像素(5)

    RGB 颜色 使用 RGB 宏可以创建一个由三个整数值(R.G.B)的 COLORREF 值. COLORREF RGB( BYTE byRed, // 红色值(R) BYTE byGreen, // ...

随机推荐

  1. 关于Html class id 命名规范

    CSS命名规则 头:header 内容:content/containe 尾:footer 导航:nav 侧栏:sidebar 栏目:column 页面外围控制整体布局宽度:wrapper 左右中:l ...

  2. asp.net 基于ajaxfileupload.js 实现文件异步上传

    前台代码: /*修改头像*/       //上传       function _sc() {           $(".ckfile").html("") ...

  3. 【转】XMPP_3920_最靠谱的中文翻译文档

    CHENYILONG Blog XMPP_3920_最靠谱的中文翻译文档 Fullscreen © chenyilong. Powered by Postach.io Blog

  4. 第7月第26天 iOS httpserver

    1. cocoahttpserver 1)httpserver [httpServer start:&error] 2)HTTPConnection [newConnection start] ...

  5. 记关于webpack4下css提取打包去重复的那些事

    注意使用vue-cli3(webpack4),默认小于30k不会抽取为公共文件,包括css和js,已测试 经过2天的填坑,现在终于有点成果 环境webpack4.6 + html-webpack-pl ...

  6. Madgwick IMU Filter

    论文链接:http://202.114.96.204/cache/13/03/x-io.co.uk/35c82431852f2aa7d0feede9dc138626/madgwick_internal ...

  7. Linux Core Dump【转】

    转自:http://www.cnblogs.com/hazir/p/linxu_core_dump.html 当程序运行的过程中异常终止或崩溃,操作系统会将程序当时的内存状态记录下来,保存在一个文件中 ...

  8. 微服务架构及Eureka简介

    一.微服务架构 服务提供者.服务消费者.服务发现组件这三者之间的关系: 各个微服务在启动时,将自己的网络地址等信息注册到服务发现组件中,服务发现组件会存储这些信息. 服务消费者可从服务发现组件查询服务 ...

  9. 破解验证码模拟登陆cnblogs

    from selenium import webdriver from selenium.webdriver import ActionChains from PIL import Image imp ...

  10. plaidctf-2016 Pwn试题小结

    回顾了一下今年plaidctf Pwn部分的题目,感觉还是蛮有意思的,值得研究一下. 1.unix_time_formatter-76 最简单的一道题,考点是UAF.说是UAF但是其实根本就不算是真正 ...