讨论已久的获取显示器物理尺寸的方法

好像在CSDN上看过很多次讨论的都没结果,昨天看书偶有感悟。如果那个......,就当......吧。

原理:

字符(串)长度像素/字符串长度厘米 = 显示器长宽像素/显示器长宽厘米。

但在不同分辨率下,计算结果会有些偏差,应该是获取的字符串长度厘米有偏差,因为这个只能精确到0.01毫米,在标准分辨率下获取的比较准确。\(^o^)/~

void CWindowsDisignDlg::OnButton1()
{
    CClientDC dc(this);
    CString str = "0000000000000000000000000";
    /*
    TEXTMETRIC me;
    dc.GetTextMetrics(&me);
    int i = me.tmHeight;
    dc.SetMapMode(MM_HIMETRIC);
    dc.GetTextMetrics(&me);
    int j = (int)me.tmHeight;
    */
    CSize size = dc.GetTextExtent(str);
    int i = size.cx;

    dc.SetMapMode(MM_LOMETRIC);
    size = dc.GetTextExtent(str);
    int j = size.cx;

    int length_mix = GetSystemMetrics(SM_CXSCREEN);
    int height_mix = GetSystemMetrics(SM_CYSCREEN);
    double height = 1.0*j*height_mix/i/1000;
    double length = 1.0*j*length_mix/i/1000;
    CString message;
    message.Format("i=%d j=%d\n%lfCM * %lfCM",i,j,length,height);
    MessageBox(message);
}

原文地址:https://www.cnblogs.com/aoyihuashao/p/1708100.html