Поделиться через


Диалоговое окно «Печать»

Диалоговое окно Печать позволяет пользователю выбрать параметры для определенного задания печати. Например, пользователь может указать используемый принтер, диапазон страниц для печати и количество копий.

Функцию PrintDlgEx можно использовать для отображения страницы свойств печати, которая содержит страницу Общие , содержащую элементы управления, аналогичные диалоговому оклу Печать . Страница свойств также может содержать дополнительные страницы свойств для конкретных приложений и драйверов, следующие за страницей Общие .

Диалоговое окно Печать создается и отображается путем инициализации структуры PRINTDLG и передачи структуры в функцию PrintDlg .

На следующем рисунке показано типичное диалоговое окно "Печать ".

Диалоговое окно печати

Если пользователь нажимает кнопку ОК , Функция PrintDlg возвращает значение TRUE и использует структуру PRINTDLG для возврата сведений о выбранных пользователем параметрах. Например, члены hDevMode и hDevNames обычно возвращают дескриптор глобальной памяти для структур и DEVNAMES . Сведения в этих структурах можно использовать для создания контекста устройства или информационного контекста для выбранного принтера.

Если пользователь отменяет диалоговое окно Печать или возникает ошибка, Функция PrintDlg возвращает значение FALSE. Причину ошибки можно определить с помощью функции CommDlgExtendedError для получения расширенного значения ошибки.

Диалоговое окно Печать содержит группу переключателей "Диапазон печати" , которые указывают, хочет ли пользователь напечатать все страницы, диапазон страниц или только выделенный текст. Перед вызовом PrintDlg можно задать один из флагов PD_ALLPAGES, PD_SELECTION или PD_PAGENUMS , чтобы указать, какая кнопка изначально выбрана. Когда PrintDlg возвращает значение TRUE, функция устанавливает один из этих флагов для указания выбора пользователем. Если задано PD_PAGENUMS , элементы nFromPage и nToPage структуры PRINTDLG содержат начальную и конечную страницы, указанные пользователем. Чтобы отключить переключатель Pages и связанные с ним элементы управления "От " и "На ", установите флаг PD_NOPAGENUMS . Чтобы отключить переключатель Выделение , установите флаг PD_NOSELECTION .

Диалоговое окно содержит элемент управления редактированием, в котором пользователь может ввести количество копий для печати. Если элемент hDevMode структуры PRINTDLG не равен NULL, член dmCopies структуры задает начальное значение для этого элемента управления редактированием. Если hDevMode имеет значение NULL, элемент nCopies структуры PRINTDLG задает начальное значение. Когда PrintDlg возвращает значение , nCopies обычно указывает количество копий, указанное пользователем. Однако если при создании диалогового окна установлен флаг PD_USEDEVMODECOPIESANDCOLLATE , при возврате nCopies всегда устанавливается в значение 1, а член dmCopiesв DEVMODE указывает количество копий для печати.

Поле Сортировка проверка указывает, хочет ли пользователь выполнять сортировку страниц при печати нескольких копий. Флаг PD_COLLATE устанавливается, если выбрано поле Сортировка проверка. Если приложение не поддерживает несколько копий или имитированных параметров сортировки, установите флаг PD_USEDEVMODECOPIESANDCOLLATE в элементе Flags структуры PRINTDLG . При этом отключается поле Сортировка проверка и элемент управления "Количество копий", если драйвер принтера не поддерживает несколько копий и параметров сортировки.

Поле Печать в файл проверка указывает, хочет ли пользователь отправлять выходные данные в файл, а не на принтер. Вы можете задать флаг PD_PRINTTOFILE, чтобы изначально был выбран проверка поле. Чтобы скрыть поле проверка, установите флаг PD_HIDEPRINTTOFILE. Чтобы отключить его, установите флаг PD_DISABLEPRINTTOFILE . Если пользователь выбирает параметр Печать в файл , PrintDlg устанавливает флаг PD_PRINTTOFILE и возвращает "FILE:" со смещением, указанным элементом wOutputOffset структуры DEVNAMES . При вызове функции для запуска операции печати укажите эту строку "FILE:" в элементе lpszOutput структуры. При указании этой строки подсистема печати запрашивает у пользователя имя выходного файла.

По умолчанию в диалоговом окне Печать изначально отображаются сведения о текущем принтере по умолчанию. Чтобы отобразить сведения для другого установленного принтера, инициализируйте и структуру DEVNAMES и назначьте глобальный дескриптор памяти структуре членам hDevMode и hDevNames . Имя устройства, указанное в элементе dmDeviceName структуры DEVMODE и в элементе wDriverOffset структуры DEVNAMES, должно указывать устройство принтера, которое также указано в разделе [Устройства] файла Win.ini. Если устройство отсутствует в списке, Функция PrintDlg возвращает ошибку.

Вы можете настроить PrintDlg для создания контекста устройства или контекста сведений для принтера, установив флаг PD_RETURNDC или PD_RETURNIC в элементе Flags структуры PRINTDLG . Функция возвращает дескриптор в контекст устройства или информационный контекст в элементе HDC . Если вы используете флаг PD_RETURNDC , можно использовать контекст устройства для создания выходных данных для принтера.

Чтобы получить сведения о принтере по умолчанию без отображения диалогового окна Печать , установите флаг PD_RETURNDEFAULT . В этом случае PrintDlg возвращается сразу после задания элементов hDevMode и hDevNames для дескрипторов для структур, содержащих сведения.

По умолчанию PrintDlg отображает окна сообщений при возникновении ошибок. Например, функция отображает сообщение об ошибке, если принтеры не установлены. Чтобы функция не отображала эти предупреждающие сообщения, установите флаг PD_NOWARNING .

В этом разделе рассматриваются следующие темы.

Настройка диалогового окна "Печать"

Вы можете указать настраиваемый шаблон для диалогового окна Печать , например, если требуется включить дополнительные элементы управления, уникальные для вашего приложения. Функция PrintDlg использует пользовательский шаблон вместо шаблона по умолчанию.

Чтобы предоставить пользовательский шаблон для диалогового окна Печать , выполните следующие действия:

  1. Создайте пользовательский шаблон, изменив шаблон по умолчанию, указанный в файле Prnsetup.dlg. Идентификаторы элементов управления, используемые в шаблоне диалогового окна печати по умолчанию, определяются в файле Dlgs.h.
  2. Используйте структуру PRINTDLG , чтобы включить шаблон следующим образом:
    • Если настраиваемый шаблон является ресурсом в приложении или библиотеке динамической компоновки, установите флаг PD_ENABLEPRINTTEMPLATE в элементе Flags . Используйте элементы hInstance и lpPrintTemplateName структуры, чтобы определить модуль и имя ресурса.

      -Или-

    • Если пользовательский шаблон уже находится в памяти, установите флаг PD_ENABLEPRINTTEMPLATEHANDLE . Используйте элемент hPrintTemplate для идентификации объекта памяти, содержащего шаблон.

Вы можете указать процедуру перехватчика PrintHookProc для диалогового окна Печать . Процедура перехватчика может обрабатывать сообщения, отправленные в диалоговое окно. Он также может отправлять сообщения в диалоговое окно. Если вы используете пользовательский шаблон для определения дополнительных элементов управления, необходимо предоставить процедуру перехватчика для обработки входных данных для элементов управления.

Чтобы включить процедуру перехватчика для диалогового окна Печать , выполните следующие действия:

  1. Установите флаг PD_ENABLEPRINTHOOK в элементе Flags структуры PRINTDLG .
  2. Укажите адрес процедуры перехватчика в члене lpfnPrintHook .

После обработки WM_INITDIALOG сообщения процедура диалогового окна отправляет WM_INITDIALOG сообщение в процедуру перехватчика. Параметр lParam этого сообщения является указателем на структуру PRINTDLG , используемую для инициализации диалогового окна.

Диалоговое окно Параметры печати можно создать и отобразить, установив флаг PD_PRINTSETUP в вызове функции PrintDlg . Однако диалоговое окно Параметры печати заменено диалоговым окном Параметры страницы и не должно использоваться в новых приложениях.

Следующие флаги применяются только к диалоговому окку параметры печати :

  • PD_ENABLESETUPHOOK
  • PD_ENABLESETUPTEMPLATE
  • PD_ENABLESETUPTEMPLATEHANDLE