Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Принтер и MFC

1.1K
16 июня 2003 года
AleX NeWMaN
32 / / 20.09.2000
Пишу программу на VC++ используя MFC.
Сделал печать, но заказчику не нравятся слишком большие поля печати, которые стоят по умолчанию... Облазил уже кажется все MFC и WinAPI но ничего не нашел.
Подскажите где искать? В какую сторону копать?
И будет совсем превосходно если кто даст пример кода уменьшаюшего поля до минимума....
2.9K
19 июня 2003 года
koks
19 / / 01.04.2003
Цитата:
Originally posted by AleX NeWMaN
Пишу программу на VC++ используя MFC.
Сделал печать, но заказчику не нравятся слишком большие поля печати, которые стоят по умолчанию... Облазил уже кажется все MFC и WinAPI но ничего не нашел.
Подскажите где искать? В какую сторону копать?
И будет совсем превосходно если кто даст пример кода уменьшаюшего поля до минимума....



В первую очередь, необходимо определить минимально допустимые для текущего принтера отступы от краев документа. Это, как правило, выполняют в функции OnBeginPrinting, так как она вызывается после того, как были сделаны необходимые установки в диалоге печати. В таком случае параметр pDC будет указателем на контекст принтера, соответсвенно выполняем:
Offset.cx = pDC->GetDeviceCaps(PHYSICALOFFSETX) и
Offset.cy = pDC->GetDeviceCaps(PHYSICALOFFSETY). Тоесть получаем минимально допустимые отступы. После этого переводим из физических координат в логические (pDC->DPtoLP (Offset)). Определяем физические размеры бумаги:
PhysSize.cx = pDC->GetDeviceCaps(PHYSICALWIDTH) и
PhysSize.cy = pDC->GetDeviceCaps(PHYSICALHEIGHT), также переводим в логические координаты. Определяем размеры печатной области, так как она в милиметрах, домножаем на соответсвующий коефициент перевода:
PrintSize.cx = pDC->GetDeviceCaps(HORZSIZE)* 0,03937
PrintSize.cy = pDC->GetDeviceCaps(VERTSIZE)* 0,03937 опять приводим к логическим координатам.
Теперь задем печатную область:
rect.left = Offset.cx
rect.right = PhysSize.cx - (Offset.cx + PrintSize.cx)
rect.top = Offset.cy
rect.bottom = PhysSize.cy - (Offset.cy + PrintSize.cy)
После этого заносиш полученный CRect в pInfo->m_rectDraw.
Все вышеизложенное всего лишь принципиальная схема, могуть быть ошибки... Да, и еще, формула рассчета печатной области зависит от mapmode, посмотри CDC::SetMapMode().

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог