Принтер и MFC
Сделал печать, но заказчику не нравятся слишком большие поля печати, которые стоят по умолчанию... Облазил уже кажется все MFC и WinAPI но ничего не нашел.
Подскажите где искать? В какую сторону копать?
И будет совсем превосходно если кто даст пример кода уменьшаюшего поля до минимума....
Пишу программу на 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().