logo
Литература_1 / photon_old

Освобождение контекста печати

Когда печать завершена и Вам больше не нужен контекст печати, Вы можете его освободить, что освободит все используемые им ресурсы.

Если Вы хотите запомнить какую-либо информацию из контекста печати для дальнейшего использования, сохраните её, вызвав функцию PpGetPC() перед тем, как освободить контекст печати. Например:

short const *orientation;

...

PpGetPC( pc, Pp_PC_ORIENTATION, &orientation );

Чтобы осободить контекст печати, вызовите:

PpReleasePC( pc );

    1. Пример

В этом примере создаётся приложение с главным окном и панелью окна с несколькими виджетами на ней. Когда Вы нажимаете кнопку "Печать", появляется диалог селектора печати. Когда Вы выбираете в этом диалоге кнопку "Print" или "Preview", панель "рисуется" на принтере.

#include <stdio.h>

#include <stdlib.h>

#include <Pt.h>

PtWidget_t *pane, *window;

PpPrintContext_t *pc;

int quit_cb ( PtWidget_t *widget, void *data, PtCallbackInfo_t *cbinfo) {

PpReleasePC (pc);

exit (EXIT_SUCCESS);

return (Pt_CONTINUE);

} // функции quit_cb()

int print_cb ( PtWidget_t *widget, void *data, PtCallbackInfo_t *cbinfo) {

int action;

/* Вы можете выполнить эти вызовы PpSetPC() просто после создания контекста печати

Его наличие позволяет Вам повторно использовать контекст печати */

PhDim_t size = { 850, 1100 };

PhDim_t size2 = { 200, 150 };

/* Установка разрешения источника пропорционально размеру страницы */

PpSetPC(pc, Pp_PC_SOURCE_SIZE, &size, 0);

/* Раскомментируйте это, чтобы установить размеры источника равными размерам виджета.

При печати виджет будет масштабирован */

/* PpSetPC(pc, Pp_PC_SOURCE_SIZE, &size2, 0); */

action = PtPrintSelection(window, NULL, " Демонстрационный селектор печати ", pc,

Pt_PRINTSEL_DFLT_LOOK);

if (action != Pt_PRINTSEL_CANCEL) {

/* Запуск печати панели окна. Заметьте, что мы используем

один и тот же контекст печати для всех печатных работ */

PpStartJob(pc);

PpContinueJob(pc);

/* Печать виджета */

PpPrintWidget(pc, pane, NULL, NULL, 0);

/* Закрытие контекста печати */

PpSuspendJob(pc);

PpEndJob(pc);

}

return (Pt_CONTINUE);

} // функции print_cb()

int main(int argc, char *argv[]) {

PtArg_t args[4];

PtWidget_t *print, *quit;

PhDim_t win_dim = { 200, 200 };

PhArea_t pane_area = { {0, 0}, {200, 150} };

PhArea_t print_area = { {30, 170}, {60, 20} };

PhArea_t quit_area = { {110, 170}, {60, 20} };

PhArea_t cir_area = { {35, 20}, {130, 110} };

PhArea_t cir2_area = { {67, 40}, {20, 20} };

PhArea_t cir3_area = { {110, 40}, {20, 20} };

PhArea_t cir4_area = { {85, 80}, {30, 30} };

PtCallback_t callbacks[2] = { {print_cb, NULL}, {quit_cb, NULL} };

if (PtInit(NULL) = = -1) PtExit(EXIT_FAILURE);

/* Создание основного окна */

PtSetArg (&args[0], Pt_ARG_DIM, &win_dim, 0);

PtSetArg (&args[1], Pt_ARG_WINDOW_TITLE, "Пример печати", 0);

if ((window = PtCreateWidget(PtWindow, Pt_NO_PARENT, 2, args)) = = NULL)

PtExit(EXIT_FAILURE);

/* Создание контекста печати */

pc = PpCreatePC();

/* Создание панели, которая будет напечатана */

PtSetArg (&args[0], Pt_ARG_AREA, &pane_area, 0);

pane = PtCreateWidget (PtPane, window, 1, args);

/* Помещаем на панель какую-то ерунду для её распечатывания */

PtSetArg (&args[0], Pt_ARG_AREA, &cir_area, 0);

PtCreateWidget (PtEllipse, pane, 1, args);

PtSetArg (&args[0], Pt_ARG_AREA, &cir2_area, 0);

PtSetArg (&args[1], Pt_ARG_FILL_COLOR, Pg_BLACK, 0);

PtCreateWidget (PtEllipse, pane, 2, args);

PtSetArg (&args[0], Pt_ARG_AREA, &cir3_area, 0);

PtSetArg (&args[1], Pt_ARG_FILL_COLOR, Pg_BLACK, 0);

PtCreateWidget (PtEllipse, pane, 2, args);

PtSetArg (&args[0], Pt_ARG_AREA, &cir4_area, 0);

PtCreateWidget (PtEllipse, pane, 1, args);

/* Создание кнопки печати */

PtSetArg(&args[0], Pt_ARG_AREA, &print_area, 0);

PtSetArg(&args[1], Pt_ARG_TEXT_STRING, "Печать", 0);

PtSetArg(&args[2], Pt_CB_ACTIVATE, &callbacks[0], 0);

print = PtCreateWidget (PtButton, window, 3, args);

/* Создание кнопки завершения */

PtSetArg(&args[0], Pt_ARG_AREA, &quit_area, 0);

PtSetArg(&args[1], Pt_ARG_TEXT_STRING, "Конец", 0);

PtSetArg(&args[2], Pt_CB_ACTIVATE, &callbacks[1], 0);

quit = PtCreateWidget (PtButton, window, 3, args);

PtRealizeWidget(window);

PtMainLoop();

return (EXIT_SUCCESS);

}

Yandex.RTB R-A-252273-3
Yandex.RTB R-A-252273-4