Страница 18 из 30 Диалоговое окно Печать… (Print) Диалоговое окно Печать (Print) позволяет пользователю выбирать параметры для отдельного задания по выводу на печать. Например, пользователь может определить принтеру для использования, размер страниц для печати и тираж. Вы создаете и показываете диалоговое окно Печатать (Print), инициализируя структуру PRINTDLG и передавая структуру в функцию PrintDlg. Если пользователь щелкает мышью по кнопке 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. Когда вы вызываете функцию StartDoc, чтобы начать печать, определите эту строку "ФАЙЛ: (FILE)" в элементе lpszOutput структуры DOCINFO. Определение этой строки заставляет подсистему печати сделать запрос у пользователя об имени файла, куда выводить информацию. По умолчанию, диалоговое окно Печать (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. Настройки диалогового окна Печать (Print) Вы можете предоставить пользовательский шаблон для диалогового окна Печать (Print), например, если Вы хотите включить дополнительные средства управления, которые являются уникальными в вашей прикладной программе. Функция PrintDlg использует ваш пользовательский шаблон вместо заданного по умолчанию шаблона. Чтобы дать пользовательский шаблон для диалогового окна Печать (Print) 1. Создайте пользовательский шаблон, изменяя заданный по умолчанию шаблон, определенный в файле PRNSETUP.DLG. Идентификаторы элементов управления, используемых в заданном по умолчанию шаблоне блока диалога Печать (Print) определены в файле DLGS.H. 2. Используйте структуру PRINTDLG, чтобы разрешить шаблону действия как ниже указано. Если ваш пользовательский шаблон - ресурс в прикладной программе или динамически компонуемой библиотеке, установите флажок PD_ENABLEPRINTTEMPLATE в элементе Flags. Используйте элементы hInstance и lpPrintTemplateName структуры, чтобы идентифицировать модуль и имя ресурса. ИЛИ 1. Если ваш пользовательский шаблон - уже в памяти, установите флажок PD_ENABLEPRINTTEMPLATEHANDLE. Используйте элемент hPrintTemplate, чтобы идентифицировать объект памяти, который содержит шаблон. Вы можете предоставить фильтр - процедуру PrintHookProc для диалогового окна Печать (Print). Фильтр - процедура может обрабатывать сообщения, посылаемые в диалоговое окно. Она может также посылать сообщения диалоговому окну. Если Вы используете пользовательский шаблон, чтобы определить дополнительные элементы управления, Вы должны предоставить фильтр - процедуру, чтобы обрабатывать вводимую информацию для ваших средств управления. Чтобы включить фильтр - процедуру для диалогового окна Печать (Print) 1. Установите флажок PD_ENABLEPRINTHOOK в элементе Flags структуры PRINTDLG. 2. Определите адрес фильтр - процедуры в элементе lpfnPrintHook. После обработки сообщения WM_INITDIALOG, процедура диалогового окна посылает сообщение WM_INITDIALOG фильтр - процедуре. Параметр lParam этого сообщения - указатель на структуру PRINTDLG, используемую, чтобы инициализировать диалоговое окно. |