Установка параметров печатной страницы


Эта статья описывает типовой код, который показывает диалоговое окно Параметры страницы (Page Setup), так что пользователь может выбирать атрибуты печатной страницы, такие как тип бумаги, источник бумаги, ориентация  и поля страницы. Типовой код сначала инициализирует структуру PAGESETUPDLG, а затем вызывает функцию PageSetupDlg, чтобы показать диалоговое окно.

Этот пример устанавливает флажок PSD_MARGINS в члене Flags и использует член rtMargin, чтобы определить первоначальные значения полей. Он устанавливает флажок PSD_INTHOUSANDTHSOFINCHES, гарантируя, что диалоговое окно выражает размеры поля страницы в тысячных долях дюйма.

При вводе данных, типовой код устанавливает члены hDevMode и hDevNames в значение ПУСТО (NULL). Если функция возвращает значение ИСТИНА (TRUE), то она использует эти элементы, чтобы возвратить дескрипторы структурам DEVMODE и DEVNAMES, содержащим вводимые данные от пользователя и информацию о принтере. Вы можете использовать эту информацию, чтобы приготовить вывод данных, которые будут пересланы в выбранный принтер.

В пример также включена и фильтр (hook) - процедура PagePaintHook, чтобы настраивать рисунок содержания макета страницы.

Пример

PAGESETUPDLG psd;    // структура станд. блока диалога
HWND hwnd;           // окно-владелец

// Инициализация PAGESETUPDLG
ZeroMemory(&psd, sizeof(PAGESETUPDLG));
psd.lStructSize = sizeof(PAGESETUPDLG);
psd.hwndOwner   = hwnd;
psd.hDevMode    = NULL; // Не забудьте освободить или сохранить hDevMode
psd.hDevNames   = NULL; // Не забудьте освободить или сохранить hDevNames
psd.Flags       = PSD_INTHOUSANDTHSOFINCHES | PSD_MARGINS | 
                  PSD_ENABLEPAGEPAINTHOOK; 
psd.rtMargin.top = 1000;
psd.rtMargin.left = 1250;
psd.rtMargin.right = 1250;
psd.rtMargin.bottom = 1000;
psd.lpfnPagePaintHook = PaintHook;

if (PageSetupDlg(&psd)==TRUE) 
{
    // здесь проверка размера бумаги и значения полей
}

Следующий пример показывает типовую фильтр (hook) - процедуру PagePaintHook, которая рисует в области макета страницы прямоугольник страницы с полями:

Пример

BOOL CALLBACK PaintHook(HWND hwndDlg, UINT uMsg,
                  WPARAM wParam, LPARAM lParam) 
{ 
    LPRECT lprc; 
    COLORREF crMargRect; 
    HDC hdc, hdcOld; 
 
    switch (uMsg) 
     { 
 
        // Рисуем прямоугольник страницы с полями. 
        case WM_PSD_MARGINRECT: 
            hdc = (HDC) wParam; 
            lprc = (LPRECT) lParam; 
 
            // Получаем системный цвет выделения. 
            crMargRect = GetSysColor(COLOR_HIGHLIGHT); 
 
            // Создаем штрихпунктирное перо цветом системного
            // выделения и выбираем его в DC макета страницы.
            hdcOld = SelectObject(hdc, CreatePen(PS_DASHDOT, 
                    .5, crMargRect)); 
 
            // Рисуем прямоугольник с полями. 
            Rectangle(hdc, lprc->left, lprc->top, 
                      lprc->right, lprc->bottom); 
 
            // Восстанавливаем предыдущее перо в DC. 
            SelectObject(hdc, hdcOld); 
            return TRUE; 
 
        default: 
            return FALSE; 
    } 
    return TRUE; 
}

 

Назад в оглавление темы
На главную страницу темы

Hosted by uCoz