GetSystemMetrics与GetDeviceCaps

1、GetSystemMetrics函数       

        要获取屏幕的像素大小要使用GetSystemMetrics函数,该函数用于得到被定义的系统数据或者系统配置信息。支持多个参数,以SM_CXSCREEN和SM_CYSCREEN得到屏幕的宽和高为例:

    int nScreenWidth, nScreenHeight;  
    nScreenWidth = GetSystemMetrics(SM_CXSCREEN);  
    nScreenHeight = GetSystemMetrics(SM_CYSCREEN);  
    printf("屏幕大小(像素) 宽:%d 高:%d\n", nScreenWidth, nScreenHeight);  

2、GetDeviceCaps函数

        使用GetDeviceCaps函数来获取屏幕的物理大小。以常用的HORZSIZE和VERTSIZE为例,获取屏幕的物理大小,代码如下:

    int nScreenWidth, nScreenHeight;  
    HDC hdcScreen = GetDC(NULL);   //获取屏幕的HDC  
    nScreenWidth = GetDeviceCaps(hdcScreen, HORZSIZE);  
    nScreenHeight = GetDeviceCaps(hdcScreen, VERTSIZE);  
    printf("屏幕大小(毫米) 宽:%d 高:%d\n", nScreenWidth, nScreenHeight);  

3计算屏幕尺寸

下面将介绍获取屏幕的物理大小后计算屏幕对角线长度,再换算成英寸。这样可以方便大家查看自己电脑屏幕是多少英寸的。

        通常大家在表示电脑、电视、手机等电子产品的屏幕大小时会使用英寸这一长度单位来描述。要注意的一点时,英寸在描述电脑、电视、手机等电子产品的屏幕大小时是指屏幕的对角线长度。
        英寸(inch,缩写为in.)在荷兰语中的本意是大拇指,一英寸就是一节大拇指的长度。当然人的大拇指的长度也是长短不一的。14世纪时,英皇爱德华二世颁布了“标准合法英寸”。其规定为:从大麦穗中间选择三粒最大的麦粒并依次排成一行的长度就是一英寸。英寸与毫米的换算关系为:
          1英寸 = 25.4毫米
          1毫米 = 0.03937英寸

        根据这一换算公式,可以直接计算出屏幕是多少英寸的,代码如下:

    int nScreenWidth, nScreenHeight;  
    HDC hdcScreen = GetDC(NULL);   //获取屏幕的HDC  
    nScreenWidth = GetDeviceCaps(hdcScreen, HORZSIZE);  
    nScreenHeight = GetDeviceCaps(hdcScreen, VERTSIZE);  
      
    printf("屏幕大小(毫米) 宽:%d 高:%d\n", nScreenWidth, nScreenHeight);  
    printf("    下面将屏幕大小由毫米换算到英寸\n");  
    const double MILLIMETRE_TO_INCH = 0.03937;  
    double fDiagonalLen = sqrt(nScreenHeight * nScreenHeight + nScreenWidth * nScreenWidth);  
    printf("屏幕对角线长为:%.2lf毫米 约 %.2lf英寸\n", fDiagonalLen, fDiagonalLen * MILLIMETRE_TO_INCH);  

        呵呵,本人笔记本的屏幕大小是13.64英寸即商家所称的14英寸笔记本。根据这份代码可以发布个小程序,供其它人用来查看电脑屏幕大小。可惜由于GetDeviceCaps函数的限制,在Win7系统下该程序检测结果不准确,WinXP系统下基本上可以正确运行。

你可能感兴趣的:(GetSystemMetrics与GetDeviceCaps)