Является ли количество пикселей на дюйм стандартным для всех дисплеев Windows PC? (LogPixelsX) в вызове Getdevicecaps WinAPI

по дисплеям Windows PC я не имею в виду Windows CE или handhelds и т. д.

уточнение
Некоторые люди ниже ошибочно думали, что я спрашиваю, что DPI (точки на дюйм) был на мониторах. То, что я прошу, это значение для LogPixelsX в GetCaps вызов API:

LOGPIXELSX количество пикселов на логический дюйм по ширине экрана.

в примерах, которые я видел, это установлено 88, независимо от экрана DPI. Кажется, магическое число вроде константы.

на вопрос Я использую GetDeviceCaps для расчета текущего шрифта экрана DPI. Образцы кода, которые я нашел, все имеют:

Const LOGPIXELSX = 88

это универсально одинаково для всех мониторов (даже широкоэкранных и обычных мониторов)? А если нет, то как найти его для текущего дисплея. (MSDN указывает, что это то же самое для всех мониторы особенности компьютер.

в системе с несколькими мониторами это значение одинаково для всех мониторов.

5 ответов


чтобы ответить на ваше уточнение вопроса:

LOGPIXELSX-это параметр, который вы передаете GetDeviceCaps для получения текущего разрешения монитора (технически горизонтальное разрешение, но все современные дисплеи имеют одинаковое горизонтальное и вертикальное разрешение). Да, это всегда 88 - если вы хотите получить другое значение из GetDeviceCaps, вы передадите другое значение. Например, чтобы получить количество бит на пиксель, вы должны передать константу BITSPIXEL, которая равна 12. Эти магические константы определяются в файле Windows API WINGDI.h.

примечание в MSDN относится не к параметру, а к возвращаемому значению.


Windows всегда будет иметь разрешение 96 DPI, если вы не измените его в настройках дисплея. В XP вы найдете его в расширенном диалоговом окне в разделе свойства дисплея- > настройки; я не знаю, где он находится в других версиях Windows.

вы правы, что GetDeviceCaps (LOGPIXELSX) вернет DPI, за исключением одного небольшого предостережения. Начиная с Vista, Windows может лгать вам о вашем фактическом настроить разрешение. Вам нужно сделать ваше приложение DPI-aware для получите истинное представление о конфигурации. Вот страница Microsoft, предоставляющая некоторые сведения, с особым акцентом на изменения, поступающие в Windows 7.

http://msdn.microsoft.com/en-us/library/dd464659(VS.85).aspx

и еще одна ссылка:

http://msdn.microsoft.com/en-us/library/ms701681(VS.85).aspx


посмотреть SetProcessDPIAware () (для Vista) и разделе getdevicecaps(...) чтобы получить DPI.

XP имеет 96 или 120 dpi. Vista на самом деле имеет ползунок для настройки через "континуум" настроек DPI. В Vista DWM заботится о масштабировании ваших приложений, Если вы явно не вызываете, что вы знаете DPI. Для XP вы должны планировать как 96, так и 120.


для случая изображения,разрешение изображения (DPIX,DPIY) должно быть принято другое постоянное разрешение монитора.преобразование твипов в пиксели для изображения dpi выполняется как:

    public struct RECT_TAG
    {
        public int iLeft;
        public int iTop;
        public int iHeight;
        public int iWidth;
    }
    public static RECT_TAG ConvertTwipsToPixels(RECT_TAG pobjRect, int plXDPI, int plYDPI)
    {
        pobjRect.iLeft = pobjRect.iLeft * plXDPI / 1440;
        pobjRect.iTop = pobjRect.iTop * plYDPI / 1440;
        pobjRect.iWidth = pobjRect.iWidth * plXDPI / 1440;
        pobjRect.iHeight = pobjRect.iHeight * plYDPI / 1440;
        return pobjRect;

    }

два стандартных параметра DPI в Windows-96 dpi (нормальный размер) и 120 dpi (большой размер) я уверен, что есть вызов Win32 для получения этого параметра, но я не уверен, куда направить вас для этого. MSDN может получить ваш ответ.

edit: Я должен уточнить, что под Windows я имею в виду Windows XP