Выяснилось, что функция возвращает не размер физ. устройства в миллиметрах, а разрешение, деленное на 2.83. Соответственно, после SetMapMode(MM_LOMETRIC) вывод на экран идет не в десятых долях миллиметра, а в 0.075 мм. В word размер страницы, однако, совпадает с реальным. Что делать?
KeSqueer Никогда не пользовался, но MSDN говорит, что GetDeviceCaps(LOGPIXELS) должна возвращать количество пикселей в дюйме, а не размер в миллиметрах. На 17-дюймовом мониторе это около сотни при разрешении 1280х1024. У Вас при таком разрешении возвращает по высоте 1024/2,83~362? О_О Это диагональ монитора 4,7 дюйма что ли?
KeSqueer LOGPIXELS возращает число пикселей в не реальные дюймы, а логическом. У монитора это значение выставляется, но обычно равна 96 пикселя/на дюйм или 120. Не знаю где у вас верде совпадает? Какраз таки в МС виндоусе это сделанно через одно место.
Прошу прощения, речь конечно же шла про HORZSIZE и VERTSIZE, проблема с ними. LOGPIXELS возвращает 96, как оно есть. Не знаю что делать. При разрешении 1280 на 800 HORZSIZE=452 VERTSIZE=282 Мерял линейкой - 332 на 208. Диагональ 15,4''
KeSqueer Эти дурики из MS похоже поделили разрешение на логическое число пикселенй на дюйм и у множили на 25 (дюйм 25,4мм) А что тебе нужно шашочки или ехать? В реестре записанны размеры монитора, могу код дать. Правада MS обходиться этими кривыми числами.
Pavia, похоже на то :-D Нужно было, чтобы после SetMapMode(MM_LOMETRIC) 1 logical unit был равен 0.1 millimeter. Можете проверить кто-нибудь, может только у меня проблема с этим? На крайний случай можно взять MM_ISOTROPIC, но нужно знать физ. размеры экрана. Так что код пригодится, буду рад. PS Интерес не практический, лишь для вербального удовлетворения
Pavia, спасибо. Проверил на 4-ех компах, по ходу это баг висты. Физический размер дисплея оказывается линейно пропорциональным установленному разрешению. На xp все нормально.