Использование стандартных диалогов
Страница 6. Параметры страницы


 

Параметры страницы

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

 
« Предыдущая статья   Следующая статья »