Использование стандартных диалогов - Параметры страницы

ОГЛАВЛЕНИЕ

 

Параметры страницы

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

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

Изначально, переменные hDevMode и hDevNames установлены в NULL. Если функция возвратит TRUE, то эти переменные будут содержать дескрипторы на структуры DEVMODE и DEVNAMES, содержащие информацию о пользовательском вводе, а так же информацию о принтере. Далее, эту информацию можно использовать для отправки данных на выбранный принтер.

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

Пример:

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

// Инициализируем PAGESETUPDLG
ZeroMemory(&psd, sizeof(psd));
psd.lStructSize = sizeof(psd);
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) {
// здесь проверяем размер бумаги и значения отступов
}

Следующий пример демонстрирует использование процедуры ловушки 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);

hdcOld = SelectObject(hdc, CreatePen(PS_DASHDOT, .5,
crMargRect));

// Рисуем прямоугольник отступа.
Rectangle(hdc, lprc->left, lprc->top, lprc->right,
lprc->bottom);

SelectObject(hdc, hdcOld);
return TRUE;

default:
return FALSE;
}
return TRUE;
}