Печать карты под операционной системой МСВС:
Способ №1 Использование библиотек QT
Достоинства данного способа:
1. Используются только функции QT и функции содержащиеся в библиотеке libmapacces.so
2. Возможности дополнительного редактирования и совершенствования
Недостатки:
1. При использовании данного примера на печать выводится только область карты видимая на экране.
2. Размер выводимого изображения не превышает размеров экрана, в связи с этим нет возможности детальной печати изображения на листах большого формата (A3-A0 и более)
Но указанные недостатки могут быть устранены при использовании достоинства №2.
Способ № 2. Печать с использованием функций MapApi. (Пример взят из файла prnapi.h)
Более подробно см. prnapi.h
Недостатки:
Данный способ под МСВС реализовать не удалось, так как не удалось найти аналога библиотекам mapprint.dll, gisforms.dll для операционной системы МСВС.
Вопрос администрации:
Реализована ли подсистема печати при помощи вышеописанных функций?
Если да, то в каких библиотеках они размещаются?
Способ №1 Использование библиотек QT
Код |
---|
// создаем принтер 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); |
Достоинства данного способа:
1. Используются только функции QT и функции содержащиеся в библиотеке libmapacces.so
2. Возможности дополнительного редактирования и совершенствования
Недостатки:
1. При использовании данного примера на печать выводится только область карты видимая на экране.
2. Размер выводимого изображения не превышает размеров экрана, в связи с этим нет возможности детальной печати изображения на листах большого формата (A3-A0 и более)
Но указанные недостатки могут быть устранены при использовании достоинства №2.
Способ № 2. Печать с использованием функций MapApi. (Пример взят из файла prnapi.h)
Код |
---|
// Загрузить принтер 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); |
Более подробно см. prnapi.h
Недостатки:
Данный способ под МСВС реализовать не удалось, так как не удалось найти аналога библиотекам mapprint.dll, gisforms.dll для операционной системы МСВС.
Вопрос администрации:
Реализована ли подсистема печати при помощи вышеописанных функций?
Если да, то в каких библиотеках они размещаются?
В изолированной системе энергия системы остается постоянной, возможны лишь переходы одного вида энергии в другой.