C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Узнать Handle монитора, Ширина экрана в мм.
Pirs
Отправлено: 31.08.2004, 16:12


Дежурный стрелочник

Группа: Участник
Сообщений: 39



Надо узнать ширину экрана в миллиметрах, для точного вывода на печать.
Для принтера просто

width = GetDeviceCaps ( Printer()->Handle , HORZSIZE ) ;

Как определить Handle для монитора ?
В объекте Screen свойства Handle нету…..
** avtoritet
Отправлено: 31.08.2004, 17:25


Не зарегистрирован







GetSystemMetrics(SM_CXSCREEN);//по горизонтали в пикселях
GetSystemMetrics(SM_CYSCREEN);//по вертикали в пикселях

Нужно мм — перемнож все что нужно и получишь милиметрах.
Pirs
Отправлено: 31.08.2004, 19:45


Дежурный стрелочник

Группа: Участник
Сообщений: 39



QUOTE (** avtoritet @ 31/08/2004, 18:27)
Нужно мм — перемнож все что нужно и получишь милиметрах.

А что еще "перемножить", если неизвестен размер монитора (14",15" и т.д.)

В пикселах — это понятно
Screen->Width и так далее...

Вопрос был о другом: как получить Handle монитора, чтоб вызвать функцию

width=GetDeviceCaps ( Handle (монитора) , HORZSIZE ) ;

В описании этой функции есть даже параметр TECHNOLOGY, который может вернуть в том числе значение DT_RASDISPLAY (Raster display).
Но надо узнать хэндл. У Screen его нет.
А может это зависит от аппаратных драйверов ?
** avtoritet
Отправлено: 01.09.2004, 01:31


Не зарегистрирован







Доброй ночи, кто не спит!
Извини, не понял тебя немного. Значит нужен хэндл:
HDC hdc = GetDC(GetDesktopWindow());//
можно проще:
hdc = GetDC(NULL);
вообщем в обеех случаях получаем, что ты просишь.
СООТВЕТСТВЕННО:
GetDeviceCaps(hdc, HORZSIZE);//по горизонатли
GetDeviceCaps(hdc, VERTSIZE);//по вертикали
НО:
но у меня почему-то на 19 дюймовом по горизонтали 320, а по вертикали 240. Если верить линейке, то: во вертикали 275, по горизонтали 365. Вот этого я немного не понимаю.
Черкни, устраивает ли тебя этот вариант. Может заешь почему вместо 275 — 240, 365 — 320?
Pirs
Отправлено: 01.09.2004, 09:47


Дежурный стрелочник

Группа: Участник
Сообщений: 39



У меня LCD в ноутбуке и размеры выдала идеально точные 270х203.
Мерял линейкой — все точно до миллиметра.
Разница может быть связана с драйвером монитора. Может дрова стоят для 18” или 17” ?
** avtoritet
Отправлено: 01.09.2004, 14:35


Не зарегистрирован







Рад что утебя работает! Я разобрался в чем дело с моим монитором. У меня телек подключен как второй монитор: чтобы фильмы на нем смотреть лежа на диване — вещь реальная. На телеке развертка 65, на мониторе 85. Получается как 17 и 19 по стандарту. Отключаю телек от монитора — все путем! Ну ладно — одной делемой меньше!

Вернуться в Вопросы программирования в C++Builder