Как получить текущий DPI системы в приложении MFC? - PullRequest
4 голосов
/ 13 мая 2011

У меня есть существующее приложение MFC, которое прекрасно работает в DPI по умолчанию (96 dpi) в Windows 7. Но когда я увеличиваю DPI на 150%, пользовательский интерфейс искажается. Я исправил проблемы с использованием полос прокрутки на определенном уровне и ссылался на статью MSDN. Мне интересно, как я могу получить текущий DPI системы, используя код MFC, чтобы установить высоту и ширину диалогового окна.

Пожалуйста, предложите !!

Ответы [ 3 ]

17 голосов
/ 13 мая 2011

Сначала вам нужно получить контекст устройства для вашего экрана. Это легко, просто позвоните в 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);
2 голосов
/ 13 мая 2011

Исходя из ответа Патрика, вы также можете прочитать это руководство Microsoft по написанию пользовательского интерфейса с высоким DPI:

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

0 голосов
/ 20 декабря 2012

Приведенный ниже фрагмент кода дал мне правильный DPI в Win7

ID2D1Factory* m_pDirect2dFactory;
D2D1CreateFactory(D2D1_FACTORY_TYPE_SINGLE_THREADED, &m_pDirect2dFactory);
FLOAT dpiX, dpiY;
m_pDirect2dFactory->GetDesktopDpi( &dpiX, &dpiY );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...