|
| БЕСПЛАТНАЯ ежедневная online лотерея! Выигрывай каждый день БЕСПЛАТНО! |
|
|
Setting Up the Printed Page
This topic describes sample code that displays a Page Setup dialog box so a user can select the attributes of the printed page, such as the paper type, paper source, page orientation, and page margins. The sample code first initializes a PAGESETUPDLG structure, and then calls the PageSetupDlg function to display the dialog box.
This example sets the PSD_MARGINS flag in the Flags member and uses the rtMargin member to specify the initial margin values. It sets the PSD_INTHOUSANDTHSOFINCHES flag to ensure that the dialog box expresses margin dimensions in thousandths of an inch. On input, the sample code sets the hDevMode and hDevNames members to NULL. If the function returns TRUE, the function uses these members to return handles to DEVMODE and DEVNAMES structures containing the user's input and information about the printer. You can use this information to prepare the output to be sent to the selected printer.
The example also enables a PagePaintHook hook procedure to customize drawing of the contents of the sample page.
PAGESETUPDLG psd; // common dialog box structure HWND hwnd; // owner window
// Initialize PAGESETUPDLG ZeroMemory(&psd, sizeof(PAGESETUPDLG)); psd.lStructSize = sizeof(PAGESETUPDLG); psd.hwndOwner = hwnd; psd.hDevMode = NULL; // Don't forget to free or store hDevMode. psd.hDevNames = NULL; // Don't forget to free or store 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) { // check paper size and margin values here }
The following example shows a sample PagePaintHook hook procedure that draws the margin rectangle in the sample page area:
BOOL CALLBACK PaintHook(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) { LPRECT lprc; COLORREF crMargRect; HDC hdc, hdcOld; switch (uMsg) { // Drawing the margin rectangle. case WM_PSD_MARGINRECT: hdc = (HDC) wParam; lprc = (LPRECT) lParam; // Get the system highlight color. crMargRect = GetSysColor(COLOR_HIGHLIGHT); // Create a dash-dot pen of the system highlight color and
// select it into the DC of the sample page. hdcOld = SelectObject(hdc, CreatePen(PS_DASHDOT, .5, crMargRect)); // Draw the margin rectangle. Rectangle(hdc, lprc->left, lprc->top, lprc->right, lprc->bottom); // Restore the previous pen to the DC. SelectObject(hdc, hdcOld); return TRUE; default: return FALSE;
} return TRUE; }
| Пригласи друзей и счет твоего мобильника всегда будет положительным! |
| Пригласи друзей и счет твоего мобильника всегда будет положительным! |
УСТАНОВКА Отпечатанной Страницы
Эта тема описывает код образца, который отображает диалогового блока Страничной Установки, так что пользователь может выбраться атрибуты отпечатанной страницы, как например, бумажный тип, бумажный источник, страничная ориентация, и страничные поля. Код образца сначала инициализирует структуру PAGESETUPDLG, затем называет функцию PageSetupDlg, чтобы отображать диалогового блока.
Этот пример устанавливает флаг PSD_MARGINS в элементе Флагов и использует элемент rtMargin, чтобы определять начальные величины поля. Это устанавливает флаг PSD_INTHOUSANDTHSOFINCHES, чтобы проверять, что диалоговый блок выражает измерения поля на тысячных дюйма. На вводе, код образца устанавливает hDevMode и участников hDevNames НЕДЕЙСТВИТЕЛЬНОГО. Если функция возвращает ИСТИНУ, функция использует этих участников, чтобы возвращать ручки в DEVMODE и структуры DEVNAMES, содержащие ввод пользователя и информация о принтере. Вы можете использовать эту информацию, чтобы подготавливать выход, который нужно посылаться в выбранный принтер.
Пример также позволяет процедуру захвата PagePaintHook, чтобы модифицировать по заказу пользователя чертеж содержания страницы образца.
psd PAGESETUPDLG; // общая диалоговая структура блока HWND hwnd; // окно владельца
// Инициализируйте PAGESETUPDLG ZeroMemory(&psd, sizeof(PAGESETUPDLG)); psd.lStructSize = sizeof(PAGESETUPDLG); psd.hwndOwner = hwnd; psd.hDevMode = НЕДЕЙСТВИТЕЛЬНЫЙ; // Не забывайте освобождать или загружать hDevMode. psd.hDevNames = НЕДЕЙСТВИТЕЛЬНЫЙ; // Не забывайте освобождать или загружать hDevNames. psd.Сигнализирует = 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;
если (PageSetupDlg(&psd)==TRUE) { // контрольный бумажный размер и величины поля здесь }
Следующий пример показывает процедуру захвата образца PagePaintHook, которая делает прямоугольником поля в страничной области образца:
BOOL CALLBACK PaintHook(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) { LPRECT lprc; COLORREF crMargRect; HDC hdc, hdcOld; ключ (uMsg) { // Чертеж прямоугольника поля. случай WM_PSD_MARGINRECT: hdc = (HDC) wParam; lprc = (LPRECT) lParam; // Получите системный световой цвет. crMargRect = GetSysColor(COLOR_HIGHLIGHT); // Создайте бросаться-точечную ручку системного светового цвета и
// выбор это на DC страницы образца. hdcOld = SelectObject(hdc, CreatePen(PS_DASHDOT, .5, crMargRect)); // Сделайте прямоугольником поля. Прямоугольник(hdc, lprc->left, lprc->top, lprc->right, lprc->bottom); // Восстановите предшествующую ручку на DC. SelectObject(hdc, hdcOld); возвращайтесь ВЕРНО; умолчание: обратная ЛОЖЬ;
} возвращайтесь ВЕРНО; }
|
|
|
|
| |