Эта статья описывает типовой код, который показывает диалоговое окно Параметры страницы (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; } |