如何在MFC应用程序中获取系统当前的DPI?

发布于 2024-11-06 15:12:02 字数 177 浏览 2 评论 0原文

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

请推荐!!

I have an existing MFC application which runs fine in default DPI ( 96 dpi) in Windows 7. But when I increase the DPI by 150 % the UI gets distorted. I have fixed issues using scroll bars at certain level and referred to msdn article. I am wondering how can I get the current DPI of a system using MFC code so that set the height and widht of a dialog.

Please suggest!!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

蓝咒 2024-11-13 15:12:02

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

HDC screen = GetDC(0);

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

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

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

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

ReleaseDC (0, screen);

First you need to get the device context for your screen. This is easy, just call GetDC, like this:

HDC screen = GetDC(0);

Then you ask for the device capabilities of that device context. In your case, you need the pixels along the X- and Y-axis per inch:

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

(see http://msdn.microsoft.com/en-us/library/dd144877(v=vs.85).aspx for more information about GetDeviceCaps).

Finally, release the device context again:

ReleaseDC (0, screen);
删除→记忆 2024-11-13 15:12:02

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

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

Following on from Patrick's answer, you might also like to read this Microsoft tutorial on writing high DPI aware user interface:

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

笑饮青盏花 2024-11-13 15:12:02

下面的代码片段给了我Win7中正确的DPI

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

The below code snippet gave me the correct DPI in Win7

ID2D1Factory* m_pDirect2dFactory;
D2D1CreateFactory(D2D1_FACTORY_TYPE_SINGLE_THREADED, &m_pDirect2dFactory);
FLOAT dpiX, dpiY;
m_pDirect2dFactory->GetDesktopDpi( &dpiX, &dpiY );
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文