Диалоговое окно Печать (Print)
Диалоговое окно Печать (Print) позволяет пользователю выбирать параметры для отдельного задания по выводу на печать. Например, пользователь может установить принтеру для использования размер страниц для печати и тираж.
Windows 2000/XP: Вы можете использовать функцию PrintDlgEx, чтобы показать на экране набор страниц Свойств печати (Print Property Sheet), который имеет страницу Общие (General), содержащую органы управления похожие на такие же в диалоговом окне Печать (Print). Набор страниц свойств может также иметь и дополнительные конкретные для приложения и специальные для драйвера вкладки свойств, следующие за страницей Общие (General).
Вы создаете и показываете диалоговое окно Печать (Print), инициализируя структуру PRINTDLG и передавая структуру в функцию PrintDlg.
Следующая иллюстрация показывает типичное диалоговое окно Печать (Print).
Если пользователь щелкает по кнопке OK, функция PrintDlg возвращает значение ИСТИНА (TRUE) и использует структуру PRINTDLG, чтобы возвратить информацию о выборе пользователя. Например, члены структуры hDevMode и hDevNames обычно возвращают глобальные дескрипторы памяти для структур DEVMODE и DEVNAMES. Вы можете использовать информацию в этих структурах, чтобы создать контекст устройства или информационный контекст для выбранного принтера.
Если пользователь отменяет диалоговое окно Печать (Print) или происходит ошибка, PrintDlg возвращает значение ЛОЖЬ (FALSE). Вы можете определить причину ошибки, используя функцию CommDlgExtendedError, чтобы извлечь расширенное значение ошибки.
Диалоговое окно Печать (Print) включает в себя группу радио-кнопок Диапазон Печати, которые указывают, желает ли пользователь печатать все страницы, определенное количество страниц или только выбранный текст. Перед вызовом функции PrintDlg, вы можете установить один из флажков PD_ALLPAGES, PD_SELECTION или PD_PAGENUMS, чтобы указать, которая кнопка первоначально выбрана. Когда PrintDlg возвращает значение ИСТИНА (TRUE), функция устанавливает один из этих флажков, чтобы указать выбор пользователя. Если установлен флажок PD_PAGENUMS, то члены nFromPage и nToPage структуры PRINTDLG содержат начальную и конечную страницы, определенные пользователем. Чтобы отключить радио-кнопку Страницы (Pages) и связанные с ней "От: (From:)" и "До: (To:)" поля редактирования, установите флажок PD_NOPAGENUMS. Чтобы отключать радио-кнопку Выделенный фрагмент (Selection), установите флажок PD_NOSELECTION.
Диалоговое окно включает в себя редактируемое поле, в которое пользователь может вводить с клавиатуры число копий для печати. Если член hDevMode структуры PRINTDLG не пустой, член dmCopies структуры DEVMODE определяет исходное значение для этого редактируемого поля. Если hDevMode имеет значение ПУСТО (NULL), член nCopies структуры PRINTDLG определяет начальное значение. Когда PrintDlg возвращает значение, nCopies обычно указывают количество копий, заданных пользователем. Однако, если вы устанавливаете флажок PD_USEDEVMODECOPIESANDCOLLATE, когда создаете диалоговое окно, nCopies всегда устанавливается в 1 при возврате, а член dmCopies стурктуры DEVMODE указывает количество копий для печати.
Окошко флажка Разобрать по копиям (Collate) указывает, желает ли пользователь сделать сортировку страниц по копиям, если печатается множество копий. Флажок PD_COLLATE устанавливается, если окошко флажка Разобрать по копиям (Collate) отмечен. Если ваша прикладная программа не поддерживает многочисленные копии или имитацию сортировки, установите флажок PD_USEDEVMODECOPIESANDCOLLATE в члене Flags структуры PRINTDLG. Это отключит отмечаемый блок Разобрать по копиям (Collate) и редактируемое поле "Число копий: (Number of Copies)", если драйвер принтера не поддерживает многократное копирование и сортировку.
Окошко флажка Печать в файл (Print To File ) указывает, что пользователь желает отправить вывод информации в файл, а не на принтер. Вы можете установить этот флажок PD_PRINTTOFILE, так чтобы изначально в окошке флажка была проставлена «галочка». Чтобы скрыть окошко флажка , установите флажок PD_HIDEPRINTTOFILE. Чтобы отключить его, установите флажок PD_DISABLEPRINTTOFILE. Если пользователь выбирает параметр Печать в файл (Print To File), функция PrintDlg устанавливает флажок PD_PRINTTOFILE и возвращает значение "ФАЙЛ: (FILE)" со смещением указывающим на член wOutputOffset структуры DEVNAMES. Когда вы вызываете функцию, которая начинает операцию печати, определите эту строку "ФАЙЛ: (FILE)" в члене lpszOutput структуры. Определение этой строки заставляет подсистему печати сделать запрос у пользователя об имени файла, куда выводить информацию.
По умолчанию, диалоговое окно Печать (Print) первоначально показывает информацию о текущем заданном по умолчанию принтере. Чтобы показать на экране информацию о другом установленном принтере, инициализируйте структуру DEVMODE и DEVNAMES и присвойте глобальный дескриптор памяти для структуры в члене hDevMode или hDevNames. Имя устройства, которое вы определяете в члене dmDeviceName структуры DEVMODE или в члене wDriverOffset структуры DEVNAMES, должно идентифицировать принтер, который также внесен в список в разделе [Devices] файла Win.ini. Если устройство не внесено в список, PrintDlg возвращает ошибку.
Вы можете предписать функции PrintDlg создать контекст устройства или информационный контекст для принтера, устанавливая флажок PD_RETURNDC или PD_RETURNIC в члене Flags структуры PRINTDLG. Функция возвращает дескриптор контекста устройства или информационного контекста в члене hDC. Если вы используете флажок PD_RETURNDC, то можете использовать контекст устройства, чтобы сделать вывод информации на принтер.
Чтобы извлечь информацию о заданном по умолчанию принтере без показа её в диалоговом окне Печать (Print), установите флажок PD_RETURNDEFAULT. В этом случае, функция PrintDlg возвращает немедленно после установки в членах hDevMode и hDevNames дескрипторы для структур, содержащих информацию.
По умолчанию, PrintDlg показывает окна сообщений, когда происходят ошибки. Например, функция показывает сообщение об ошибке, если нет установленных принтеров. Чтобы запретить функции отображать эти предупреждающие сообщения, установите флажок PD_NOWARNING.
В этом разделе обсуждаются нижеследующие темы.