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