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