【问题标题】:How to get the current DPI of a system in MFC Application?如何在 MFC 应用程序中获取系统的当前 DPI?
【发布时间】:2023-03-04 05:26:01
【问题描述】:

我有一个现有的 MFC 应用程序,它在 Windows 7 的默认 DPI (96 dpi) 下运行良好。但是当我将 DPI 增加 150% 时,UI 会失真。我已经修复了在特定级别使用滚动条的问题,并参考了 msdn 文章。我想知道如何使用 MFC 代码获取系统的当前 DPI,以便设置对话框的高度和宽度。

请推荐!!

【问题讨论】:

    标签: visual-c++ mfc


    【解决方案1】:

    首先,您需要获取屏幕的设备上下文。这很简单,只需调用 GetDC,如下所示:

    HDC screen = GetDC(0);
    

    然后您询问该设备上下文的设备功能。在您的情况下,您需要每英寸沿 X 轴和 Y 轴的像素:

    int dpiX = GetDeviceCaps (screen, LOGPIXELSX);
    int dpiY = GetDeviceCaps (screen, LOGPIXELSY);
    

    (有关 GetDeviceCaps 的更多信息,请参阅 http://msdn.microsoft.com/en-us/library/dd144877(v=vs.85).aspx)。

    最后,再次释放设备上下文:

    ReleaseDC (0, screen);
    

    【讨论】:

      【解决方案2】:

      根据 Patrick 的回答,您可能还想阅读这篇关于编写高 DPI 感知用户界面的 Microsoft 教程:

      http://msdn.microsoft.com/en-us/library/dd464659.aspx

      【讨论】:

        【解决方案3】:

        下面的代码 sn-p 在 Win7 中给了我正确的 DPI

        ID2D1Factory* m_pDirect2dFactory;
        D2D1CreateFactory(D2D1_FACTORY_TYPE_SINGLE_THREADED, &m_pDirect2dFactory);
        FLOAT dpiX, dpiY;
        m_pDirect2dFactory->GetDesktopDpi( &dpiX, &dpiY );
        

        【讨论】:

        • GetDeviceCaps 完全相同,但仅限Win7+。
        • 不,它也适用于带有平台更新的 Vista SP2。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-09-15
        • 2013-08-23
        • 1970-01-01
        相关资源
        最近更新 更多