C++ C++ C# C# ASP.NET Security ASP.NET Security ASM ASM Скачать Скачать Поиск Поиск Хостинг Хостинг  
  Программа для работы с LPT портом...
Язык: .NET — ©Alexey...
  "ASP.NET Atlas" – AJAX в исполнении Micro...
Язык: .NET — ©legigor@mail.ru...
  "Невытесняющая" Многопоточность...
Язык: C/C++ — ©...
  01.05.2010 — Update World C++: Сборник GPL QT исходников
  15.12.2007 — Весь сайт целиком можно загрузить по ссылкам из раздела Скачать
Хостинг:
Windows 2003, ASP.NET 2.0
бесплатный и от 80 руб./мес


   Отправить письмо
Кулабухов Артем, Беларусь




 Как определить края (отступы) печати / Печать / Visual C++

Как определить края (отступы) печати

Windows Software Development Kit (SDK) не предоставляет функции для вычисления краёв печати напрямую. Приложение может вычислить данную информацию при помощи вызова GetDeviceCaps(). В этой статье обсуждаются эти функции, а так же приводятся фрагменты кода в качестве иллюстраций.

Приложение может определить отступы печати следующим образом:

Вычисление левого и верхнего отступа

  1. Определите верхний левый угол печатаемой области, вызвав GetDeviceCaps() с параметрами PHYSICALOFFSETX и PHYSICALOFFSETY. Например:
       // Инициализируем нашу структуру pt
       pt.x = 0; pt.y = 0;
    
       // Поместим в неё левый верхний угол печатаемой области
       pt.x = GetDeviceCaps(hPrnDC, PHYSICALOFFSETX);
       pt.y = GetDeviceCaps(hPrnDC, PHYSICALOFFSETY); 



  2. Определим количество пикселей, требуемых для желаемого отступа (x и y смещения) вызвав GetDeviceCaps() с флагами LOGPIXELSX и LOGPIXELSY.
       // Выясняем, смещение, чтобы слелать левый и верхний отступы для
       // вывода на принтер. Обратите внимание на использование макроса
       // "max". Возможно, может возникнеть вопрос о значениях отступов
       // которые нельза задать для данного принтера. Например, HP
       // LaserJet имеет непечатаемую область 0.25" поэтому значение
       // 0.1" не получится.
    
       xOffset = max (0, GetDeviceCaps (hPrnDC, LOGPIXELSX) *
                         nInchesWeWant - pt.x);
    
       yOffset = max (0, GetDeviceCaps (hPrnDC, LOGPIXELSY) *
                         nInchesWeWant - pt.y);
    
       // При выполнении печати, можно либо смещать на вышеприведённые
       // значения либо вызвать SetViewportOrg(), чтобы установить точку
       // (0,0) смещения отступа, который Вы вычислили.
    
       SetViewportOrg (hPrnDC, xOffset, yOffset);
       all other output here 



Вычисление нижнего и правого отступов

  1. Получаем общий размер физической страницы (включая печатаемую и непечатаемую области) вызвав GetDeviceCaps() с параметрами PHYSICALWIDTH и PHYSICALHEIGHT в Windows NT.

  2. Определяем количество пикселей, требуемых для желаемых отступов справа и снизу, вызывая GetDeviceCaps с флагами LOGPIXELSX и LOGPIXELSY.

  3. Вычисляем размер печатаемой области при помощи GetDeviceCaps() с флагами HORZRES и VERTRES. Следующий фрагмент кода иллюстрирует шаги с a по c:
       // Получаем размер печатаемой области
       pt.x = GetDeviceCaps(hPrnDC, PHYSICALWIDTH);
       pt.y = GetDeviceCaps(hPrnDC, PHYSICALHEIGHT);
    
       xOffsetOfRightMargin = xOffset +
                              GetDeviceCaps (hPrnDC, HORZRES) -
                              pt.x -
                              GetDeviceCaps (hPrnDC, LOGPIXELSX) *
                              wInchesWeWant;
    
       yOffsetOfBottomMargin = yOffset +
                               GetDeviceCaps (hPrnDC, VERTRES) -
                               pt.y -
                               GetDeviceCaps (hPrnDC, LOGPIXELSY) *
                               wInchesWeWant; 



ЗАМЕЧАНИЕ: Теперь можно отсекать весь вывод прямоугольником, ограниченным xOffset, yOffset, xOffsetOfRightMargin, и yOffsetOfBottomMargin.