На главную... Продукты | Технологии | Классификаторы | Проекты | Скачать | Цены| Форум | Статьи | Обучение | Контакты

voice2 (Автор тем)

Поиск  Пользователи  Правила  Войти
Форум » Пользователи » voice2
Выбрать дату в календареВыбрать дату в календаре

Страницы: 1
Печать карть программным способом под операционной системой МСВС
 
[B]Печать карты под операционной системой МСВС:
[/B]
[B]Способ №1 Использование библиотек QT
[/B]
[code]
// создаем принтер
printer = new QPrinter( QPrinter::ScreenResolution);
HDC FmapDC;
RECT mapRect;
QPainter *p;
p = new QPainter();
// создаем изображение равное по размеру области вывода карты
QPixmap * pixmap = new QPixmap(MAP->viewport()->width(),MAP->viewport()->height());

if (MAP -> hMap) // если карта открыта заполняем созданное изображение
  {                           //изображением карты отображенной на экране
     
       FxDC.xcDisplay = pixmap -> x11AppDisplay();
       FxDC.xcWindow = pixmap -> handle();
       FxDC.xcContext = XCreateGC(FxDC.xcDisplay, FxDC.xcWindow, 0, NULL);
  FxDC.xcPoint.X =   MAP->viewport()->x();
  FxDC.xcPoint.Y =   MAP->viewport()->y();
FmapDC = HDC(&FxDC);
mapRect.left = MAP->viewport()->x() + MAP->contentsX();
mapRect.top  = MAP->viewport()->y() + MAP->contentsY() ;
mapRect.right  = MAP->viewport()->x() + MAP->viewport()->width() + MAP->contentsX();
mapRect.bottom = MAP->viewport()->y() + MAP->viewport()->height() + MAP->contentsY();
mapPaint95( MAP->hMap,FmapDC,1,&mapRect);
XFreeGC( FxDC.xcDisplay,FxDC.xcContext );  

   printer->setFullPage( TRUE );
  // запускаем стандартный диалог печати
   if ( printer->setup(this) ) {               // printer dialog
       qDebug("start printing");
      if( !p -> begin( printer ) ) {               // paint on printer
           qDebug( "Printing aborted");
           return;
       }
  // распечатываем полученное изображение
     p->drawTiledPixmap(0,0,MAP->viewport()->width(),MAP->viewport()->height(),*pixmap,0,0);
  }

}
 delete(p);
 delete(pixmap);
 delete(printer);
[/code]
[B]Достоинства данного способа:[/B]
1. Используются только функции QT и функции содержащиеся в библиотеке libmapacces.so
2. Возможности дополнительного редактирования и совершенствования

[B]Недостатки:[/B]
1. При использовании данного примера на печать выводится только область карты видимая на экране.
2. Размер выводимого изображения не превышает размеров экрана, в связи с этим нет возможности детальной печати изображения на листах большого формата (A3-A0 и более)
Но указанные недостатки могут быть устранены при использовании достоинства №2.


[B]Способ № 2. Печать с использованием функций MapApi. (Пример взят из файла prnapi.h)[/B]
[code]
 // Загрузить принтер
 HPRINTER printer = prnLoadPrinter();
 // Вызвать диалог печати
 // (печать выбранного фрагмента карты производится
 //  автоматически при нажатии кнопки "Печать")

 ret = prnMapPrint(hmap, printer, printparm, taskparm);

// При успешном выполнении диалога возвращаемое значение не равно 0
 if (ret != 0)
 {
   // Закрытие диалога при помощи кнопки "Выбрать"
   if (printparm->Regime == MPR_SELECTFRAME)
   {
     // Вызвать пользовательскую функцию выбора прямоугольной области
     // ...
   }
   // Закрытие диалога при помощи кнопки "Изменить"
   if (printparm->Regime == MPR_CHANGEFRAME)
   {
     // Вызвать пользовательскую функцию изменения прямоугольной области
     // ...
   }
 }
  // Освободить принтер
 prnFreePrinter(printer);
[/code]
Более подробно см. prnapi.h

[B]Недостатки: [/B]
Данный способ под МСВС реализовать не удалось, так как не удалось найти аналога библиотекам mapprint.dll, gisforms.dll  для операционной системы МСВС.
Вопрос администрации:
Реализована ли подсистема печати при помощи вышеописанных функций?
Если да, то в каких библиотеках они размещаются?
Страницы: 1



© КБ Панорама, 1991-2024

Регистрируясь или авторизуясь на форуме, Вы соглашаетесь с Политикой конфиденциальности