Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Количество пикселов на 1 мм экрана монитора  (Прочитано 16031 раз)
0 Пользователей и 4 Гостей смотрят эту тему.
Kuval
Гость
« : 13-11-2003 05:33 » 

Работаю с C++Builder 6.0 под Windows 2000.
Нужно на экране монитора рисовать линии, длина которых задаётся в миллиметрах. Для этого мне нужно знать сколько пикселов приходится на 1 мм для горизонтального и вертикального направлений. Подскажите, пожалуйста, с помощью каких функций это можно сделать.
Записан
Xeysan
Гость
« Ответ #1 : 13-11-2003 05:49 » 

Цитата

 Для этого мне нужно знать сколько пикселов приходится на 1 мм для горизонтального и вертикального направлений.

Для этого тебе нужно знать режимы отображения ( map modes + SetMapMode ). Успехов.
Записан
Diletant
Помогающий

de
Offline Offline

« Ответ #2 : 13-11-2003 09:01 » 

Теоретически, c помощью функции API GetDeviceCaps можно получить размеры экрана как в миллиметрах так и в пикселах. Дальше, надеюсь, понятно. Но там, помнится, был какой-то баг от мелкомягких, и приходилось действовать через GetSystemMetrics.  Может ВСВ есть свои функции для этого, не знаю.
Записан
Xeysan
Гость
« Ответ #3 : 13-11-2003 18:39 » new

Подробнее смотри anatolix.naumen.ru - Ч. Пецзольд - Программирование для Windows 95. Логической еденицей режима отображения MM_LOMETRIC является 0.1 мм - я думаю хватит... Это на API - в Борланде(OWL) смотри сам...
Записан
SOS
Гость
« Ответ #4 : 13-11-2003 20:57 » 

Vse proshe Улыбаюсь))
DPI - kak nazvanie edinitzi izmereniya ekrana - eto Dots Per Inch, otcuda perevedi:
1 Inch = 25mm
Dot - pixel
Exemle:
 600/25 = 25
 800/25 = 32
to v mm 600/800 = 25/32
Ili ya ne prav Не понял
Записан
grozny
Гость
« Ответ #5 : 13-11-2003 21:32 » 

[/quote]
Теоретически, c помощью функции API GetDeviceCaps можно получить размеры экрана как в миллиметрах так и в пикселах. Дальше, надеюсь, понятно.
[/quote]

Всегда пользуюсь GetDeviceCaps(), чего и вам советую.
хелп чё пишет:

The GetDeviceCaps function retrieves device-specific information for the specified device.

int GetDeviceCaps(
  HDC hdc,     // handle to DC
  int nIndex   // index of capability
);

вот полезные индексы:
...
HORZSIZE     Width, in millimeters, of the physical screen.

VERTSIZE     Height, in millimeters, of the physical screen.

HORZRES      Width, in pixels, of the screen.

VERTRES      Height, in raster lines, of the screen.

LOGPIXELSX   Number of pixels per logical inch along the screen width. In a system with multiple display monitors, this value is the same for all monitors.

LOGPIXELSY      Number of pixels per logical inch along the screen height. In a system with multiple display monitors, this value is the same for all monitors.
...

Цитата

Но там, помнится, был какой-то баг от мелкомягких, и приходилось действовать через GetSystemMetrics.

Реально информацию заполняет дисплейный драйвер. Если драйвер прошёл WHQL, все эти параметры обязательно будут правильными. В неофициальных драйверах, просочившихся в инет, может быть и проруха. Так что не спешите пинать MS в этом случае...
Записан
Kuval
Гость
« Ответ #6 : 14-11-2003 05:36 » 

Всем спасибо за помощь. GetDeviceCaps в принципе решает проблему. Получил 3.2 пикселя на 1 мм для small fonts, 1024x768. Точность в пределах погрешности. Вопрос для себя считаю закрытым.
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #7 : 21-04-2006 16:14 » 

(комент)

FAQ
Записан

Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines