Структура PRINTDLGEX содержит информацию, которую функция PrintDlgEx использует, чтобы инициализировать набор страниц Свойства печати (Print Property Sheet). После того, как пользователь закроет вкладку свойств, система использует эту структуру, чтобы возвратить информацию об пользовательских настройках.
Синтаксис
typedef struct tagPDEX { DWORD lStructSize; HWND hwndOwner; HGLOBAL hDevMode; HGLOBAL hDevNames; HDC hDC; DWORD Flags; DWORD Flags2; DWORD ExclusionFlags; DWORD nPageRanges; DWORD nMaxPageRanges; LPPRINTPAGERANGE lpPageRanges; DWORD nMinPage; DWORD nMaxPage; DWORD nCopies; HINSTANCE hInstance; LPCTSTR lpPrintTemplateName; LPUNKNOWN lpCallback; DWORD nPropertyPages; HPROPSHEETPAGE *lphPropertyPages; DWORD nStartPage; DWORD dwResultAction; } PRINTDLGEX, *LPPRINTDLGEX; |
Члены структуры
lStructSize
Определяет размер структуры, в байтах.hwndOwner
Дескриптор окна, которое владеет вкладкой свойств. Этот член структуры должен быть любым допустимым дескриптором окна; он не может быть значением ПУСТО (NULL).hDevMode
Это дескриптор перемещаемого объекта глобальной памяти, который содержит структуру DEVMODE. Если при вводе данных член hDevMode - не ПУСТО (NULL), Вы должны назначить перемещаемый блок памяти для структуры DEVMODE и инициализировать её члены. Функция PrintDlgEx использует введенные данные, чтобы инициализировать органы управления вкладки свойств. Когда PrintDlgEx возвращает значение, члены структуры DEVMODE обозначают ввод данных пользователем.
Если при вводе данных hDevMode - ПУСТО (NULL), PrintDlgEx назначает память для структуры DEVMODE, инициализирует ее члены, чтобы обозначить ввод данных пользователем и возвращает дескриптор, который идентифицирует структуру.
Для получения дополнительной информации о членах hDevMode и hDevNames, см. раздел Замечаний в конце этой темы.
hDevNames
Дескриптор объекта перемещаемой глобальной памяти, который содержит структуру DEVNAMES. Если при вводе данных hDevNames - не ПУСТО (NULL), Вы должны назначить перемещаемый блок памяти для структуры DEVNAMES и инициализировать ее члены. Функция PrintDlgEx использует введенные данные, чтобы инициализировать органы управления вкладки свойств. Когда PrintDlgEx возвращает значение, члены структуры DEVNAMES содержат информацию для принтера, выбранного пользователем. Вы можете использовать эту информацию, чтобы создать контекст устройства или информационный контекст.
Член структуры hDevNames может быть ПУСТО (NULL), в таком случае, функция PrintDlgEx назначает память для структуры DEVNAMES, инициализирует ее члены, чтобы обозначить, ввод данных пользователем и возвращает дескриптор, который идентифицирует структуру.
Для получения дополнительной информации о членах hDevMode и hDevNames, см. раздел Замечаний в конце этой темы.
hDC
Дескриптор контекста устройства или информационного контекста, в зависимости от того, устанавливает ли член структуры Flags флажок PC_RETURNIC или PD_RETURNDC. Если никакой флажок не установлен, значение этого члена структуры неопределенное. Если заданы оба флажка, PD_RETURNDC имеет приоритет.
Flags
Установка битовых флажков, которую Вы можете использовать для инициализации набора страниц Свойств печати (Print Property Sheet). Когда функция PrintDlgEx возвращет значение, она устанавливает эти флажки, чтобы обозначить ввод данных пользователя. Этот член структуры может состоять из одного или нескольких нижеследующих значений.
Значение | Предназначение |
PD_ALLPAGES | Заданный по умолчанию флажок, который обозначает, что вначале была выбрана радиокнопка Все (All). Этот флажок используется как символ - заместитель, чтобы обозначить, что флажки PD_PAGENUMS и PD_SELECTION и PD_CURRENTPAGE не определены. |
PD_COLLATE | Если этот флажок
установлен, выбирается окошко флажка Разложить
по копиям (Collate).
Если этот флажок устанавливается, когда функция PrintDlgEx возвращает значения, приложение должно имитировать комплектование нескольких копий. Для получения дополнительной информации, см. описание флажка PD_USEDEVMODECOPIESANDCOLLATE. Смотри PD_NOPAGENUMS. |
PD_CURRENTPAGE | Если этот флажок установлен, выбирается Текущая страница (Current Page). Если ни один из флажков PD_PAGENUMS, PD_SELECTION или PD_CURRENTPAGE не установлен, выбирается радиокнопка Всe (All). |
PD_DISABLEPRINTTOFILE | Отключает окошко флажка Печатать в файл (Print to File). |
PD_ENABLEPRINTTEMPLATE | Обозначает, что члены hInstance и lpPrintTemplateName определяют замену для заданного по умолчанию шаблона диалогового окна в нижней части страницы Общие (General). Заданный по умолчанию шаблон содержит органы управления, похожие на такие же в диалоговом окне Печать (Print). Система использует указанный шаблон, чтобы создать окно, которое является дочерним элементом страницы Общие (General). |
PD_ENABLEPRINTTEMPLATEHANDLE | Обозначает, что член структуры hInstance идентифицирует блок данных, который содержит предварительно загруженный шаблон диалогового окна. Этот шаблон заменяет заданный по умолчанию шаблон диалогового окна в нижней части страницы Общие (General). Система использует этот указанный шаблон, чтобы создать окно, которое является потомком страницы Общие (General). Система игнорирует член структуры lpPrintTemplateName , если установлен этот флажок. |
PD_EXCLUSIONFLAGS | Обозначает, что член структуры ExclusionFlags идентифицирует элементы, которые будут исключены из вкладок свойств драйвера принтера. Если этот флажок не установлен, элементы должны быть исключенными из вкладок свойств драйвера принтера по умолчанию . Исключения препятствуют дублированию элементов внутри страницы Общие (General), любых определенных приложением страниц и страниц драйвера принтера. |
PD_HIDEPRINTTOFILE | Скрывает окошко флажка Печатать в файл (Print to File). |
PD_NOCURRENTPAGE | Отключает радиокнопку Текущая страница (Current Page). |
PD_NOPAGENUMS | Отключает радиокнопку Страницы (Pages) и связанные поля редактирования текста. Это также заставляет появиться в диалоговом окне окошко флажка Разложить по копиям (Collate). |
PD_NOSELECTION | Отключает радиокнопку Выделенный фрагмент (Selection). |
PD_NOWARNING | Когда происходит ошибка, препятствует предупреждающему сообщению отобразиться на экране. |
PD_PAGENUMS | Если этот флажок установлен, выбирается радио-кнопка Страницы (Pages). Если ни один из флажков PD_PAGENUMS, PD_SELECTION или PD_CURRENTPAGE не установлен, выбирается радиокнопка Все (All). Если этот флажок установлен, когда функция PrintDlgEx возвращает значение, то член структуры lpPageRange обозначает диапазон страниц, которые определил пользователь. |
PD_PRINTTOFILE | Если этот флажок установлен, выбирается окошко флажка Печать в файл (Print to File). Если этот флажок установлен, когда функция PrintDlgEx возвращает значение, то смещение, указанное членом wOutputOffset структуры DEVNAMES содержит строку " ФАЙЛ: " ("FILE:"). Когда вы вызываете функцию StartDoc, чтобы начать операцию печати, определите эту строку " ФАЙЛ: " в члене lpszOutput структуры DOCINFO. Определение этой строки заставляет подсистему печати сделать запрос пользователю об имени выходного файла. |
PD_RETURNDC | Заставляет функцию PrintDlgEx возвратить контекст устройства, соответствующий выбору пользователя, сделанному во вкладке свойств. Контекст устройства возвращается в члене hDC. |
PD_RETURNDEFAULT | Если этот флажок установлен, функция PrintDlgEx не показывает на экране вкладку свойств. Вместо этого, она устанавливает в членах hDevNames и hDevMode дескрипторы структур DEVMODE и DEVNAMES, которые инициализированы для системного принтера по умолчанию. И hDevNames, и hDevMode должны иметь значение ПУСТО (NULL), или PrintDlgEx возвратит значение ошибки. |
PD_RETURNIC | Подобен флажку PD_RETURNDC, за исключением того, что этот флажок возвращает информационный контекст, а не контекст устройства. Если ни PD_RETURNDC ни PD_RETURNIC не определен, hDC при выводе данных не устанавливается. |
PD_SELECTION | Если этот флажок установлен, выбирается радиокнопка Выделенный фрагмент (Selection). Если ни флажок PD_PAGENUMS, ни флажок PD_SELECTION или PD_CURRENTPAGE не установлен, то выбирается радиокнопка Все (All). |
PD_USEDEVMODECOPIES | То же самое, что и PD_USEDEVMODECOPIESANDCOLLATE |
PD_USEDEVMODECOPIESANDCOLLATE | Этот флажок обозначает
поддерживает ли ваша программа
распечатку нескольких копий и раскладку
по копиям. Установка этого флажка
при вводе данных обозначает, что ваше
приложение не поддерживает
многократное копирование и сортировку.
В этой ситуации, член nCopies структуры
PRINTDLGEX всегда возвращает 1, а флажок PD_COLLATE
никогда не устанавливается в члене
структуры Flags.
Если этот флажок не установлен, приложение ответственно за печать и раскладку по копиям нескольких копий. В этой ситуации, член nCopies структуры PRINTDLGEX указывает количество копий (тираж), которое пользователь хочет напечатать, а флажок PD_COLLATE в члене структуры Flags обозначает, желает ли пользователь сортировать по копиям. Независимо от того, устанавливается этот флажок или нет, программа может выяснить благодаря члену nCopies и флажку PD_COLLATE сколько копий сформировать и печатать ли их сортируя по копиям. Если этот флажок устанавливается, а драйвер принтера не поддерживает многократное копирование, поле редактирования текста Число копий (Copies) блокируется. Точно так же, если этот флажок устанавливается, а драйвер принтера не поддерживает сортировку, окошко флажка Разложить по копиям (Collate) отключается. Члены dmCopies и dmCollate структуры DEVMODE содержат информацию о числе копий и сортировке, используемую драйвером принтера. Если этот флажок установлен и драйвер принтера поддерживает многократное копирование, член структуры dmCopies указывает количество копий, затребованных пользователем. Если этот флажок установлен и драйвер принтера поддерживает сортировку, член dmCollate структуры DEVMODE указывает, хочет ли пользователь раскладку по копиям. Если этот флажок не установлен, член структуры dmCopies всегда возвращает 1, а член структуры dmCollate является всегда нулевым. |
PD_USELARGETEMPLATE | Принуждает вкладку свойств использовать большой шаблон для страницы Общие (General). Больший шаблон предусматривает больше пространства для приложений, которые задают пользовательский шаблон для нижней части страницы Общие (General). |
Flags2
Зарезервированный. Должен быть установлен в 0.ExclusionFlags
Установка битов флажков, которые могут исключить элементы из вкладок свойств драйвера принтера в наборе страниц Свойства печати (Print Property Sheet). Это значение используется, только в том случае, если флажок PD_EXCLUSIONFLAGS устанавливается в члене структуры Flags. Флажки исключения должны использоваться только в том случае, если элемент, который будет исключен, должен быть включенным или в страницу Общие (General), или в определяемую программой страницу в наборе страниц Свойства печати (Print Property Sheet). Этот член структуры может задать нижеследующий флажок.
Значение | Предназначение |
PD_EXCL_COPIESANDCOLLATE | Исключает органы управления Количество копий (Copies) и Разложить по копиям (Collate) из вкладок свойств драйвера принтера в наборе страниц Свойства печати (Print Property Sheet). Этот флажок должен всегда устанавливаться тогда, когда приложение использует заданные по умолчанию органы управления Количество копий (Copies) и Разложить по копиям (Collate), предоставляемые нижней частью страницы Общие (General) набора страниц Свойств печати (Print Property Sheet). |
nPageRanges
При вводе данных, установите этот член структуры на начальное число диапазона страниц, заданного в массиве lpPageRanges. Когда PrintDlgEx возвращает значения функцией, nPageRanges обозначает число диапазона страниц определенное пользователем, которое сохранено в массиве lpPageRanges. Если флажок PD_NOPAGENUMS установлен, это значение не допустимо.nMaxPageRanges
Устанавливает размер, в элементах массива, буфера lpPageRanges. Это значение указывает максимальное число диапазона страниц, которые могут сохраниться в массиве. Если флажок PD_NOPAGENUMS определен, это значение не допустимо. Если флажок PD_NOPAGENUMS не определен, это значение должно быть больше чем нуль.
lpPageRanges
Указатель на буфер, содержащий массив структур PRINTPAGERANGE. При вводе данных, массив содержит начальные диапазоны страниц, которые отобразятся в поле редактирования текста Страницы (Pages ). Когда функция PrintDlgEx возвращает значения, массив содержит диапазоны страниц, заданных пользователем. Если флажок PD_NOPAGENUMS определен, это значение не допустимо. Если флажок PD_NOPAGENUMS не определен, lpPageRanges должен быть не ПУСТО (NULL).
nMinPage
Определяет минимальное значение для диапазона страниц, заданных в редактируемом поле Страницы (Pages ). Если флажок PD_NOPAGENUMS определен, это значение не допустимо.nMaxPage
Определяет максимальное значение для диапазона страниц, заданных в редактируемом поле Страницы (Pages ). Если флажок PD_NOPAGENUMS определен, это значение не допустимо.nCopies
Если член структуры hDevMode имеет значение ПУСТО (NULL), то содержит исходный тираж для поля редактирования Число копий (Copies); или же, член dmCopies структуры DEVMODE содержит начальное значение. Когда PrintDlgEx возвращает значение, член nCopies содержит фактический тираж который должно напечатать приложение. Это значение зависит от того, приложение или драйвер принтера несут ответственность за печать нескольких копий. Если в члене Flags установлено значение PD_USEDEVMODECOPIESANDCOLLATE, nCopies при возврате значения всегда 1, а драйвер принтера несет ответственность за печать нескольких копий. Если флажок не установлен, прикладная программа несет ответственность за распечатку количества копий, заданных членом nCopies. Для получения дополнительной информации, см. описание флажка PD_USEDEVMODECOPIESANDCOLLATE.hInstance
Если флажок PD_ENABLEPRINTTEMPLATE установлен в члене структуры Flags, hInstance - дескриптор приложения или экземпляра модуля, который содержит шаблон диалогового окна, именованный членом структуры lpPrintTemplateName. Если в члене структуры Flags установлен флажок PD_ENABLEPRINTTEMPLATEHANDLE, hInstance - дескриптор объекта памяти, содержащего шаблон диалогового окна. Если ни один из флажков шаблона не установлен в члене структуры Flags, hInstance должен быть ПУСТО (NULL).
lpPrintTemplateName
Указатель на строку с символом нуля в конце, которая именует ресурс шаблона диалогового окна в модуле, идентифицированном членом hInstance. Этот шаблон замещает шаблон по умолчанию нижней части страницы Общие (General). Этот член игнорируется, если в члене Flags не установлен флажок PD_ENABLEPRINTTEMPLATE.lpCallback
Указатель на определяемый программой объект повторного вызова.
Объект должен содержать класс IPrintDialogCallback, чтобы получить сообщения для дочернего диалогового окна в нижней части страницы Общие (General).
Объект повторного вызова должен также содержать и класс IObjectWithSite , чтобы получить указатель на интерфейс IPrintDialogServices. Функция PrintDlgEx вызывает метод IUnknown:: QueryInterface в объекте повторного вызова и для IID_IPrintDialogCallback и для IID_IObjectWithSite, чтобы выяснить какие интерфейсы поддерживаются.
Если Вы не хотите извлекать какую - либо информацию из объектов повторного вызова, установите lpCallback в ПУСТО (NULL).
nPropertyPages
Устанавливает количество дескрипторов вкладки свойств в массиве lphPropertyPages.
lphPropertyPages
Содержит массив дескрипторов вкладок свойств, которые добавляются к набору страниц Свойств печати (Print Property Sheet). Дополнительные вкладки свойств следуют за страницей Общие (General). Используйте функцию CreatePropertySheetPage, чтобы создать эти дополнительные страницы. Когда функция PrintDlgEx возвращает значения , все дескрипторы HPROPSHEETPAGE в массиве lphPropertyPages разрушаются. Если nPropertyPages равняется нулю, lphPropertyPages должен быть ПУСТО (NULL).
nStartPage
Устанавливает вкладку свойств, которая первоначально отображалась на экране. Чтобы показать на экране страницу Общие (General), установите флажок START_PAGE_GENERAL. Или же, установите отсчитываемый от нуля индекс вкладки свойств в массиве, определенном в члене структуры lphPropertyPages(элементе). Для согласованности, рекомендуется, чтобы вкладки свойств всегда начались со страницы Общие (General).
dwResultAction
При вводе данных, установите этот член структуры нуль. Если функция PrintDlgEx возвращает значение S_OK, член dwResultAction содержит результат работы диалогового окна. Если PrintDlgEx возвращает ошибку, этот член структуры должен игнорироваться. Член структуры dwResultAction может быть однbv из ниже перечисленных значений.
Значение | Предназначение |
PD_RESULT_APPLY | Пользователь щелкнул по кнопке Применить (Apply), а позже щелкнул по кнопке Отменить (Cancel). Это обозначает, что пользователь хочет применить изменения, сделанные во вкладке свойств, но все же не хочет печатать. Структура PRINTDLGEX содержит информацию, заданную пользователем, когда щелкнули по кнопке Применить (Apply). |
PD_RESULT_CANCEL | Пользователь щелкнул по кнопке Отменить (Cancel). Информация в структуре PRINTDLGEX неизменна. |
PD_RESULT_PRINT | Пользователь щелкнул по кнопке Печатать (Print). Структура PRINTDLGEX содержит информацию, определенную пользователем. |
Замечания
Если и hDevMode и hDevNames - ПУСТО (NULL), PrintDlgEx инициализирует вкладку свойств, используя текущий заданный по умолчанию принтер. Чтобы инициализировать вкладку свойств для другого принтера, используйте член wDeviceOffset структуры DEVNAMES, чтобы задать имя принтера.
Обратите внимание! на то, что член dmDeviceName структуры DEVMODE также устанавливает имя принтера. Однако, dmDeviceName ограничен 32 символами, а имя в wDeviceOffset - нет. Если имена в wDeviceOffset и в dmDeviceName не являются одними и теми же, PrintDlgEx инициализирует вкладку свойств, используя принтер, указанный в wDeviceOffset. |
Если флажок PD_RETURNDEFAULT установлен, а и hDevMode, и hDevNames - ПУСТО (NULL), PrintDlgEx использует члены hDevNames и hDevMode, чтобы возвратить информацию о текущем заданном по умолчанию принтере, не показывая диалоговое окно.
В ходе исполнения кода PrintDlgEx, структуры DEVMODE и DEVNAMES, которые Вы определили в структуре PRINTDLGEX, не всегда могут содержать текущие данные. По этой причине, конкретные для приложения вкладки свойств, так же как и стандартные процедуры IPrintDialogCallback для начальной страницы должны использовать интерфейс IPrintDialogServices, чтобы извлечь информацию о состоянии текущего принтера.
Смотри также
Обзор Библиотека стандартных диалоговых окон, Структуры, используемые библиотекой стандартных диалоговых окон, CreatePropertySheetPage, DEVMODE, DEVNAMES, IPrintDialogCallback, IPrintDialogServices, PrintDlgEx
Размещение и совместимость PRINTDLGEX |
|
Windows. NET Server |
Да |
Windows XP |
Да |
Windows 2000 |
Да |
Windows NT |
Нет |
Windows Me |
Нет |
Windows 98 |
Нет |
Windows 95 |
Нет |
Заголовочный файл |
|
- объявлено в |
Commdlg.h |
- включено в |
Windows.h |
Unicode |
Нет |
Замечания по платформе |
Не имеется |