Страница 6 из 7 Параметры страницы Чтобы показать диалоговое окно "Параметры страницы" (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; }
|