Структура PRINTDLGEX


Структура 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, DEVNAMESIPrintDialogCallback, IPrintDialogServicesPrintDlgEx

Размещение и совместимость PRINTDLGEX

Windows. NET Server

Да

Windows XP

Да

Windows 2000

Да

Windows NT

Нет

Windows Me

Нет

Windows 98

Нет

Windows 95

Нет

Заголовочный файл

 

- объявлено в

Commdlg.h

- включено в

Windows.h

Unicode

Нет

Замечания по платформе

Не имеется

 

Назад в оглавление
На главную страницу
На оглавление справки

Hosted by uCoz