Эта статья описывает типовой код, который показывает диалоговое окно Параметры страницы (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(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)
{
// Здесь проверим значения размера бумаги и полей страницы
}
Следующий пример показывает типовую фильтр - процедуру 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;
}