Страница: 1 |
Страница: 1 |
Вопрос: GetDeviceCaps
Добавлено: 20.10.06 11:45
Автор вопроса: SergeyR
Размер экрана в мм, возвращаемый ф-цией GetDeviceCaps не совпадает
с реальным размером экрана (линейкой замерял).
Фун-ция возвращает 320x240, а реально 357x286.
Код на VB:
Private Declare Function GetDeviceCaps Lib "gdi32" (ByVal hdc As Long, ByVal nIndex As Long) As Long
Private Declare Function GetDesktopWindow Lib "user32" () As Long
Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long
Private Sub Form_Load()
Dim hwnd As Long
Dim hdc As Long
Dim i As Long
hwnd = GetDesktopWindow
hdc = GetDC(hwnd)
i = GetDeviceCaps(hdc, 4) ' ширина в мм
i = GetDeviceCaps(hdc, 6) ' высота в мм
End Sub
Вопрос - почему?
Ответы
Всего ответов: 10
Номер ответа: 1
Автор ответа:
SergeyR
Вопросов: 5
Ответов: 9
Профиль | | #1
Добавлено: 20.10.06 11:52
Добавление к вопросу.
Монитор NEC MyltiSync LCD 1830
Драйвер установлен.
Номер ответа: 2
Автор ответа:
Sharp
Лидер форума
ICQ: 216865379
Вопросов: 106
Ответов: 9979
Web-сайт:
Профиль | | #2
Добавлено: 20.10.06 18:35
Вообще говоря, и не должен реальный размер возвращаться.
Номер ответа: 3
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #3
Добавлено: 20.10.06 18:58
А дюймы монитора не учитываем?
Помойму на 15 дюймах совпадает 1 к 1, на глаз... линейкой по миллиметрам не проверял.
Номер ответа: 4
Автор ответа:
Ra$cal
ICQ: 8068014
Вопросов: 18
Ответов: 817
Web-сайт:
Профиль | | #4
Добавлено: 21.10.06 02:26
Sharp, это почему. Возвращаться должны размеры графического контекста устройства.
HORZSIZE Width, in millimeters, of the physical screen.
VERTSIZE Height, in millimeters, of the physical screen.
У меня всё ок. С линейкой проверял. Была необходимость. Если подождёте денёк-другой обрежу прогу до состояние демки.
Номер ответа: 5
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #5
Добавлено: 21.10.06 20:43
2 Ra$cal, потому и не должны, что апишка никак не учитывает дюймы понимтора... Если у тебя совпадает, значит монитор у тебя скорее всего 15-ти дуюмовый...
Номер ответа: 6
Автор ответа:
Ra$cal
ICQ: 8068014
Вопросов: 18
Ответов: 817
Web-сайт:
Профиль | | #6
Добавлено: 21.10.06 21:18
Вот демка. Хотелось бы услышать результаты измерения линии линейкой. Должна быть 5 см плюс-минус 2 мм
http://ifolder.ru/313036
HACKER
Спасибо за посты. Каждый пост вызывает острый приступ смеха. Ты лучше петросяна!!!
Номер ответа: 7
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #7
Добавлено: 21.10.06 22:13
http://ifolder.ru/313036
37mm
Samsung SyncMaster 710n
Разрешение родное, 1280х1024
Номер ответа: 8
Автор ответа:
Ra$cal
ICQ: 8068014
Вопросов: 18
Ответов: 817
Web-сайт:
Профиль | | #8
Добавлено: 21.10.06 22:24
Интересно... У меня на любых разрешениях 5 см. Ща покопаю параметры GetDeviceCaps
Номер ответа: 9
Автор ответа:
Ra$cal
ICQ: 8068014
Вопросов: 18
Ответов: 817
Web-сайт:
Профиль | | #9
Добавлено: 21.10.06 22:50
PixInInchY = GetDeviceCaps(dc, LOGPIXELSY);
if (IsVert){
return (Cm / 2.57) * PixInInchX;
}
else{
return (Cm / 2.57) * PixInInchY;
}
Если сделать формулу такой, то длина соответствовала только при родном разрешении (1280Х1024, моник Samsung SyncMaster 174T). 800Х600 - размер 8 см
Номер ответа: 10
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #10
Добавлено: 22.10.06 17:06
2 Ra$cal, да и тебе спасибо за понимание юмора... Но обрати внимание, практически в каждом моем посте, даже в том где есть юмор, помимо его, есть доля правды... Ну впрочем как и у Петросяна