GetDeviceCaps(LOGPIXELS) возвращает неправильное значение

Тема в разделе "WASM.BEGINNERS", создана пользователем KeSqueer, 13 ноя 2008.

  1. KeSqueer

    KeSqueer Сергей

    Публикаций:
    0
    Регистрация:
    19 июл 2007
    Сообщения:
    1.183
    Адрес:
    Москва
    Выяснилось, что функция возвращает не размер физ. устройства в миллиметрах, а разрешение, деленное на 2.83.
    Соответственно, после SetMapMode(MM_LOMETRIC) вывод на экран идет не в десятых долях миллиметра, а в 0.075 мм. В word размер страницы, однако, совпадает с реальным.
    Что делать?:)
     
  2. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    KeSqueer
    Никогда не пользовался, но MSDN говорит, что GetDeviceCaps(LOGPIXELS) должна возвращать количество пикселей в дюйме, а не размер в миллиметрах. На 17-дюймовом мониторе это около сотни при разрешении 1280х1024. У Вас при таком разрешении возвращает по высоте 1024/2,83~362? О_О Это диагональ монитора 4,7 дюйма что ли?
     
  3. max7C4

    max7C4 New Member

    Публикаций:
    0
    Регистрация:
    17 мар 2008
    Сообщения:
    1.203
    попробуй HORZSIZE и VERTSIZE
     
  4. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    KeSqueer
    LOGPIXELS возращает число пикселей в не реальные дюймы, а логическом.
    У монитора это значение выставляется, но обычно равна 96 пикселя/на дюйм или 120.
    Не знаю где у вас верде совпадает? Какраз таки в МС виндоусе это сделанно через одно место.
     
  5. KeSqueer

    KeSqueer Сергей

    Публикаций:
    0
    Регистрация:
    19 июл 2007
    Сообщения:
    1.183
    Адрес:
    Москва
    Прошу прощения, речь конечно же шла про HORZSIZE и VERTSIZE, проблема с ними. LOGPIXELS возвращает 96, как оно есть.
    Не знаю что делать:dntknw:. При разрешении 1280 на 800 HORZSIZE=452 VERTSIZE=282
    Мерял линейкой - 332 на 208. Диагональ 15,4''
     
  6. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    KeSqueer
    Эти дурики из MS похоже поделили разрешение на логическое число пикселенй на дюйм и у множили на 25 (дюйм 25,4мм)
    А что тебе нужно шашочки или ехать? В реестре записанны размеры монитора, могу код дать.
    Правада MS обходиться этими кривыми числами.
     
  7. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    KeSqueer
    :) Извниняюсь. С диагональю всё ясно, учитывая поправку Pavia:
     
  8. KeSqueer

    KeSqueer Сергей

    Публикаций:
    0
    Регистрация:
    19 июл 2007
    Сообщения:
    1.183
    Адрес:
    Москва
    Pavia, похоже на то :-D
    Нужно было, чтобы после SetMapMode(MM_LOMETRIC) 1 logical unit был равен 0.1 millimeter.
    Можете проверить кто-нибудь, может только у меня проблема с этим?
    На крайний случай можно взять MM_ISOTROPIC, но нужно знать физ. размеры экрана. Так что код пригодится, буду рад.
    PS
    Интерес не практический, лишь для вербального удовлетворения:)
     
  9. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    Вот код он выводит размеры монитора и прочии параметры. Правда хватает первый попавшийся.
     
  10. KeSqueer

    KeSqueer Сергей

    Публикаций:
    0
    Регистрация:
    19 июл 2007
    Сообщения:
    1.183
    Адрес:
    Москва
    Pavia, спасибо.
    Проверил на 4-ех компах, по ходу это баг висты. Физический размер дисплея оказывается линейно пропорциональным установленному разрешению. На xp все нормально.