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


Структура PRINTDLGA (commdlg.h)

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

Синтаксис

typedef struct tagPDA {
  DWORD           lStructSize;
  HWND            hwndOwner;
  HGLOBAL         hDevMode;
  HGLOBAL         hDevNames;
  HDC             hDC;
  DWORD           Flags;
  WORD            nFromPage;
  WORD            nToPage;
  WORD            nMinPage;
  WORD            nMaxPage;
  WORD            nCopies;
  HINSTANCE       hInstance;
  LPARAM          lCustData;
  LPPRINTHOOKPROC lpfnPrintHook;
  LPSETUPHOOKPROC lpfnSetupHook;
  LPCSTR          lpPrintTemplateName;
  LPCSTR          lpSetupTemplateName;
  HGLOBAL         hPrintTemplate;
  HGLOBAL         hSetupTemplate;
} PRINTDLGA, *LPPRINTDLGA;

Члены

lStructSize

Тип: DWORD

Размер структуры в байтах.

hwndOwner

Тип: HWND

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

hDevMode

Тип: HGLOBAL

Дескриптор перемещаемого объекта глобальной памяти, содержащего структуру DEVMODE . Если для входных данных hDevMode не задано значение NULL , необходимо выделить перемещаемый блок памяти для структуры DEVMODE и инициализировать ее элементы. Функция PrintDlg использует входные данные для инициализации элементов управления в диалоговом окне. При возврате PrintDlg элементы DEVMODE указывают входные данные пользователя.

Если для входных данных hDevMode имеет значение NULL , PrintDlg выделяет память для структуры DEVMODE , инициализирует ее члены, чтобы указать входные данные пользователя, и возвращает дескриптор, который идентифицирует его.

Если драйвер устройства для указанного принтера не поддерживает расширенные режимы устройства, при возврате PrintDlghDevMode имеет значение NULL.

Если имя устройства (указанное членом dmDeviceName структуры DEVMODE ) не отображается в разделе [устройства] WIN.INI, PrintDlg возвращает ошибку.

Дополнительные сведения об элементах hDevMode и hDevNames см. в разделе Примечания в конце этой статьи.

hDevNames

Тип: HGLOBAL

Дескриптор перемещаемого объекта глобальной памяти, содержащего структуру DEVNAMES . Если hDevNames не имеет значение NULL для входных данных, необходимо выделить перемещаемый блок памяти для структуры DEVNAMES и инициализировать его члены. Функция PrintDlg использует входные данные для инициализации элементов управления в диалоговом окне. Когда PrintDlg возвращается, элементы DEVNAMES содержат сведения о принтере, выбранном пользователем. Эти сведения можно использовать для создания контекста устройства или контекста сведений.

Элемент hDevNames может иметь значение NULL. В этом случае PrintDlg выделяет память для структуры DEVNAMES , инициализирует ее члены, чтобы указать входные данные пользователя, и возвращает дескриптор, который идентифицирует его.

Дополнительные сведения об элементах hDevMode и hDevNames см. в разделе Примечания в конце этой статьи.

hDC

Тип: HDC

Дескриптор контекста устройства или контекста сведений в зависимости от того, указывает ли элемент Flags флаг PD_RETURNDC или флаг PC_RETURNIC . Если ни флаг не указан, значение этого элемента не определено. Если указаны оба флага, PD_RETURNDC имеет приоритет.

Flags

Тип: DWORD

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

Значение Значение
PD_ALLPAGES
0x00000000
Флаг по умолчанию, указывающий, что переключатель Все изначально выбран. Этот флаг используется в качестве заполнителя, чтобы указать, что флаги PD_PAGENUMS и PD_SELECTION не указаны.
PD_COLLATE
0x00000010
Если этот флаг установлен, выбрано поле Сортировка проверка.

Если этот флаг установлен при возврате функции PrintDlg , приложение должно имитировать параметры сортировки нескольких копий. Дополнительные сведения см. в описании флага PD_USEDEVMODECOPIESANDCOLLATE .

См . PD_NOPAGENUMS.

PD_DISABLEPRINTTOFILE
0x00080000
Отключает поле Печать в файл проверка.
PD_ENABLEPRINTHOOK
0x00001000
Включает процедуру перехватчика, указанную в элементе lpfnPrintHook . Это позволяет выполнить процедуру перехватчика для диалогового окна Печать .
PD_ENABLEPRINTTEMPLATE
0x00004000
Указывает, что элементы hInstance и lpPrintTemplateName определяют замену шаблона диалогового окна "Печать" по умолчанию.
PD_ENABLEPRINTTEMPLATEHANDLE
0x00010000
Указывает, что элемент hPrintTemplate идентифицирует блок данных, содержащий предварительно загруженный шаблон диалогового окна. Этот шаблон заменяет шаблон по умолчанию для диалогового окна Печать . Если этот флаг указан, система игнорирует элемент lpPrintTemplateName .
PD_ENABLESETUPHOOK
0x00002000
Включает процедуру перехватчика, указанную в элементе lpfnSetupHook . Это позволяет выполнить процедуру перехватчика для диалогового окна Настройка печати .
PD_ENABLESETUPTEMPLATE
0x00008000
Указывает, что элементы hInstance и lpSetupTemplateName определяют замену шаблона диалогового окна установки печати по умолчанию.
PD_ENABLESETUPTEMPLATEHANDLE
0x00020000
Указывает, что элемент hSetupTemplate определяет блок данных, содержащий предварительно загруженный шаблон диалогового окна. Этот шаблон заменяет шаблон по умолчанию для диалогового окна Настройка печати . Если этот флаг указан, система игнорирует элемент lpSetupTemplateName .
PD_HIDEPRINTTOFILE
0x00100000
Скрывает поле Печать в файл проверка.
PD_NONETWORKBUTTON
0x00200000
Скрывает и отключает кнопку Сеть .
PD_NOPAGENUMS
0x00000008
Отключает переключатель Страницы и связанные элементы управления редактированием. Кроме того, в диалоговом окне появляется поле Сортировка проверка.
PD_NOSELECTION
0x00000004
Отключает переключатель Выбор .
PD_NOWARNING
0x00000080
Предотвращает отображение предупреждающего сообщения при отсутствии принтера по умолчанию.
PD_PAGENUMS
0x00000002
Если этот флаг установлен, выбран переключатель Страницы . Если этот флаг установлен при возврате функции PrintDlg , члены nFromPage и nToPage указывают на начальную и конечную страницы, указанные пользователем.
PD_PRINTSETUP
0x00000040
Вызывает отображение в системе диалогового окна Параметры печати , а не диалогового окна Печать .
PD_PRINTTOFILE
0x00000020
Если этот флаг установлен, выбрано поле Печать в файл проверка. Если этот флаг установлен при возврате функции PrintDlg , смещение, указанное членом wOutputOffset структуры DEVNAMES , содержит строку "FILE:". При вызове функции StartDoc для запуска операции печати укажите эту строку "FILE:" в элементе lpszOutput структуры DOCINFO . При указании этой строки подсистема печати запрашивает у пользователя имя выходного файла.
PD_RETURNDC
0x00000100
Заставляет PrintDlg возвращать контекст устройства, соответствующий выбранным пользователем в диалоговом окне. Контекст устройства возвращается в HDC.
PD_RETURNDEFAULT
0x00000400
Если этот флаг установлен, функция PrintDlg не отображает диалоговое окно. Вместо этого он задает элементы hDevNames и hDevMode для обработки структур DEVMODE и DEVNAMES , которые инициализированы для принтера по умолчанию системы. И hDevNames , и hDevMode должны иметь значение NULL, иначе PrintDlg возвращает ошибку.
PD_RETURNIC
0x00000200
Аналогично флагу PD_RETURNDC , за исключением того, что этот флаг возвращает контекст сведений, а не контекст устройства. Если ни PD_RETURNDC , ни PD_RETURNIC не указаны, hDC не определен в выходных данных.
PD_SELECTION
0x00000001
Если этот флаг установлен, выбран переключатель Выбор . Если ни PD_PAGENUMS , ни PD_SELECTION не заданы, выбран переключатель Все .
PD_SHOWHELP
0x00000800
Вызывает отображение кнопки Справка в диалоговом окне. Участник hwndOwner должен указать окно для получения зарегистрированных сообщений HELPMSGSTRING , которые отправляет диалоговое окно, когда пользователь нажимает кнопку Справка .
PD_USEDEVMODECOPIES
0x00040000
То же, что и PD_USEDEVMODECOPIESANDCOLLATE.
PD_USEDEVMODECOPIESANDCOLLATE
0x00040000
Этот флаг указывает, поддерживает ли приложение несколько копий и параметров сортировки. Установите этот флаг на входных данных, чтобы указать, что приложение не поддерживает несколько копий и параметров сортировки. В этом случае элемент nCopies структуры PRINTDLG всегда возвращает значение 1, а PD_COLLATE никогда не задается в элементе Flags .

Если этот флаг не установлен, приложение отвечает за печать и сортировку нескольких копий. В этом случае элемент nCopies структуры PRINTDLG указывает количество копий, которые пользователь хочет распечатать, а флаг PD_COLLATE в элементе Flags указывает, требуется ли ему выполнять параметры сортировки.

Независимо от того, установлен ли этот флаг, приложение может определить из nCopies и PD_COLLATE , сколько копий необходимо отрисовывать и следует ли печатать их с сортировкой.

Если этот флаг установлен и драйвер принтера не поддерживает несколько копий, элемент управления редактирования "Копии " отключен. Аналогичным образом, если этот флаг установлен и драйвер принтера не поддерживает параметры сортировки, поле Сортировка проверка отключается.

Члены dmCopies и dmCollate структуры DEVMODE содержат сведения о копиях и сортировке, используемых драйвером принтера. Если этот флаг установлен и драйвер принтера поддерживает несколько копий, член dmCopies указывает количество копий, запрошенных пользователем. Если этот флаг установлен и драйвер принтера поддерживает параметры сортировки, член dmCollate структуры DEVMODE указывает, требуется ли пользователю выполнять параметры сортировки. Если этот флаг не установлен, член dmCopies всегда возвращает значение 1, а член dmCollate всегда равен нулю.

Известная проблема в Windows 2000/XP/2003: Если этот флаг не установлен перед вызовом PrintDlg, printDlg может менять значения nCopies и dmCopies при возврате. Обходной путь для этой проблемы — использовать dmCopies , если его значение больше 1, в противном случае используйте nCopies, чтобы получить фактическое количество копий, которые должны быть напечатаны при возврате PrintDlg .

 

Чтобы гарантировать, что PrintDlg или PrintDlgEx возвращает правильные значения в членах dmCopies и dmCollate структуры DEVMODE , задайте PD_RETURNDC = TRUE и PD_USEDEVMODECOPIESANDCOLLATE = TRUE. При этом член nCopies структуры PRINTDLG всегда равен 1, а PD_COLLATE всегда имеет значение FALSE.

Чтобы гарантировать, что PrintDlg или PrintDlgEx возвращают правильные значения в nCopies и PD_COLLATE, задайте PD_RETURNDC = TRUE и PD_USEDEVMODECOPIESANDCOLLATE = FALSE. При этом dmCopies всегда имеет значение 1, а dmCollate всегда имеет значение FALSE.

В Windows Vista и Windows 7 при вызове PrintDlg или PrintDlgEx с PD_RETURNDC задано значение TRUE , а PD_USEDEVMODECOPIESANDCOLLATEЗНАЧЕНИЕ FALSE, функция PrintDlg или PrintDlgEx задает количество копий в элементе nCopies структуры PRINTDLG и количество копий в структуре, представленной элементом HDC структуры PRINTDLG .

При вызове GDI необходимо игнорировать значение nCopies, учитывать значение 1 и использовать возвращенный HDC, чтобы избежать печати повторяющихся копий.

nFromPage

Тип: WORD

Начальное значение для элемента управления редактированием начальной страницы.

Когда PrintDlg возвращает значение nFromPage является начальной страницей, указанной пользователем. Если переключатель Страницы выбран, когда пользователь нажимает кнопку Окей , PrintDlg устанавливает флаг PD_PAGENUMS и не возвращается, пока пользователь не введет значение начальной страницы, которое находится в пределах минимального или максимального диапазона страниц.

Если входное значение nFromPage или nToPage выходит за пределы минимального или максимального диапазона, PrintDlg возвращает ошибку только в том случае, если указан флаг PD_PAGENUMS ; В противном случае отображается диалоговое окно, но значение вне диапазона изменяется на минимальное или максимальное значение.

nToPage

Тип: WORD

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

nMinPage

Тип: WORD

Минимальное значение диапазона страниц, указанное в элементах управления редактирования страницы From и To . Если значение nMinPage равно nMaxPage, переключатель Pages и элементы управления редактированием начальной и конечной страницы отключены.

nMaxPage

Тип: WORD

Максимальное значение диапазона страниц, указанное в элементах управления изменения страницы "От " и "До ".

nCopies

Тип: WORD

Начальное количество копий для элемента управления изменением "Копии" , если hDevMode имеет значение NULL; В противном случае член dmCopies структуры DEVMODE содержит начальное значение. Когда PrintDlg возвращает значение , nCopies содержит фактическое количество копий для печати. Это значение зависит от того, отвечает ли приложение или драйвер принтера за печать нескольких копий. Если флаг PD_USEDEVMODECOPIESANDCOLLATE установлен в элементе Flags , значение nCopies всегда равно 1 при возврате, а драйвер принтера отвечает за печать нескольких копий. Если флаг не задан, приложение отвечает за печать количества копий, указанных nCopies. Дополнительные сведения см. в описании флага PD_USEDEVMODECOPIESANDCOLLATE .

hInstance

Тип: HINSTANCE

Если флаг PD_ENABLEPRINTTEMPLATE или PD_ENABLESETUPTEMPLATE установлен в элементе Flags , hInstance — это дескриптор для экземпляра приложения или модуля, который содержит шаблон диалогового окна с именем элемента lpPrintTemplateName или lpSetupTemplateName .

lCustData

Тип: LPARAM

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

lpfnPrintHook

Тип: LPPRINTHOOKPROC

Указатель на процедуру перехватчика PrintHookProc , которая может обрабатывать сообщения, предназначенные для диалогового окна Печать . Этот элемент игнорируется, если в элементе Flags не установлен флаг PD_ENABLEPRINTHOOK.

lpfnSetupHook

Тип: LPSETUPHOOKPROC

Указатель на процедуру перехватчика SetupHookProc , которая может обрабатывать сообщения, предназначенные для диалогового окна Настройка печати . Этот элемент игнорируется, если флаг PD_ENABLESETUPHOOK не установлен в элементе Flags .

lpPrintTemplateName

Тип: LPCTSTR

Имя ресурса шаблона диалогового окна в модуле, определяемого элементом hInstance . Этот шаблон заменяет шаблон диалогового окна "Печать " по умолчанию. Этот элемент игнорируется, если флаг PD_ENABLEPRINTTEMPLATE не установлен в элементе Flags .

lpSetupTemplateName

Тип: LPCTSTR

Имя ресурса шаблона диалогового окна в модуле, определяемого элементом hInstance . Этот шаблон заменяет шаблон диалогового окна "Настройка печати " по умолчанию. Этот элемент игнорируется, если в элементе Flags не установлен флаг PD_ENABLESETUPTEMPLATE.

hPrintTemplate

Тип: HGLOBAL

Если флаг PD_ENABLEPRINTTEMPLATEHANDLE задан в элементе Flags , hPrintTemplate — это дескриптор объекта памяти, содержащего шаблон диалогового окна. Этот шаблон заменяет шаблон диалогового окна "Печать " по умолчанию.

hSetupTemplate

Тип: HGLOBAL

Если флаг PD_ENABLESETUPTEMPLATEHANDLE задан в элементе Flags , hSetupTemplate — это дескриптор объекта памяти, содержащего шаблон диалогового окна. Этот шаблон заменяет шаблон диалогового окна "Настройка печати " по умолчанию.

Комментарии

Если значения hDevMode и hDevNames имеют значение NULL, PrintDlg инициализирует диалоговое окно с помощью текущего принтера по умолчанию. Чтобы инициализировать диалоговое окно для другого принтера, используйте элемент wDeviceOffset структуры DEVNAMES , чтобы указать имя принтера.

Обратите внимание, что элемент dmDeviceName структуры DEVMODE также указывает имя принтера. Однако длина dmDeviceName ограничена 32 символами, а имя wDeviceOffset — нет. Если имена wDeviceOffset и dmDeviceName не совпадают, PrintDlg инициализирует диалоговое окно с помощью принтера, указанного параметром wDeviceOffset.

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

Примечание

Заголовок commdlg.h определяет PRINTDLG как псевдоним, который автоматически выбирает версию ANSI или Юникод этой функции на основе определения константы препроцессора ЮНИКОД. Использование псевдонима, не зависящий от кодирования, с кодом, который не является нейтральным для кодировки, может привести к несоответствиям, которые приводят к ошибкам компиляции или времени выполнения. Дополнительные сведения см. в разделе Соглашения для прототипов функций.

Требования

   
Минимальная версия клиента Windows 2000 Professional [только классические приложения]
Минимальная версия сервера Windows 2000 Server [только классические приложения]
Верхняя часть commdlg.h (включая Windows.h)

См. также раздел

Общая библиотека диалоговых окон

Основные понятия

DEVMODE

DEVNAMES

PrintDlg

Справочные материалы

WM_INITDIALOG