Оригинальный DVD-ROM: eXeL@B DVD !
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
выпущен 2 августа!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

ПРОГРАММИРОВАНИЕ НА C и С++



Давно заметил, что всё-таки языки С/C++ это не самый лучший вариант программирования под Windows. Сейчас появилась масса более современных и удобных языков, например тот же Python - кроссплатформенный язык, очень легок в изучение. Я его изучил буквально за несколько дней по этому курсу - ссылка. Автор постарался, там видеоуроки на удивление легкие и понятные.

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

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.

 

 





<< ВЕРНУТЬСЯ В ПОДРАЗДЕЛ

<< ВЕРНУТЬСЯ В ОГЛАВЛЕНИЕ




Материалы находятся на сайте https://exelab.ru/pro/



Оригинальный DVD-ROM: eXeL@B DVD !


Вы находитесь на EXELAB.rU Проект ReactOS