Структура PRINTDLGW (commdlg.h)
Содержит сведения, которые функция PrintDlg использует для инициализации диалогового окна печати. После того как пользователь закроет диалоговое окно, система использует эту структуру для возврата сведений о выборе пользователя.
Синтаксис
typedef struct tagPDW {
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;
LPCWSTR lpPrintTemplateName;
LPCWSTR lpSetupTemplateName;
HGLOBAL hPrintTemplate;
HGLOBAL hSetupTemplate;
} PRINTDLGW, *LPPRINTDLGW;
Члены
lStructSize
Тип: DWORD
Размер структуры в байтах.
hwndOwner
Тип: HWND
Дескриптор окна, которому принадлежит диалоговое окно. Это может быть любой допустимый дескриптор окна или значение NULL , если у диалогового окна нет владельца.
hDevMode
Тип: HGLOBAL
Дескриптор перемещаемого объекта глобальной памяти, который содержит структуру DEVMODE . Если для входных данных hDevMode не равно NULL , необходимо выделить перемещаемый блок памяти для структуры DEVMODE и инициализировать ее элементы. Функция PrintDlg использует входные данные для инициализации элементов управления в диалоговом окне. При возврате PrintDlg члены DEVMODE указывают на входные данные пользователя.
Если для входных данных hDevMode имеет значение NULL , PrintDlg выделяет память для структуры DEVMODE , инициализирует ее члены, чтобы указать входные данные пользователя, и возвращает дескриптор, идентифицирующий его.
Если драйвер устройства для указанного принтера не поддерживает расширенные режимы устройства, при возврате PrintDlgзначение hDevMode равно NULL.
Если имя устройства (указанное членом dmDeviceName структуры DEVMODE ) не отображается в разделе [devices] 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_PAGENUMS и PD_SELECTION не указаны. |
|
Если этот флаг установлен, будет выбрано поле Сортировка проверка.
Если этот флаг установлен при возврате функции PrintDlg , приложение должно имитировать параметры сортировки для нескольких копий. Дополнительные сведения см. в описании флага PD_USEDEVMODECOPIESANDCOLLATE . См . PD_NOPAGENUMS. |
|
Отключает поле Печать в файл проверка. |
|
Включает процедуру перехватчика, указанную в элементе lpfnPrintHook . Это позволит выполнить процедуру перехватчика для диалогового окна Печать . |
|
Указывает, что элементы hInstance и lpPrintTemplateName задают замену шаблону диалогового окна "Печать" по умолчанию. |
|
Указывает, что элемент hPrintTemplate идентифицирует блок данных, содержащий предварительно загруженный шаблон диалогового окна. Этот шаблон заменяет шаблон по умолчанию для диалогового окна Печать . Если этот флаг указан, система игнорирует элемент lpPrintTemplateName . |
|
Включает процедуру перехватчика, указанную в элементе lpfnSetupHook . Это включает процедуру перехватчика для диалогового окна Настройка печати . |
|
Указывает, что элементы hInstance и lpSetupTemplateName указывают замену шаблона диалогового окна установки печати по умолчанию. |
|
Указывает, что элемент hSetupTemplate определяет блок данных, содержащий предварительно загруженный шаблон диалогового окна. Этот шаблон заменяет шаблон по умолчанию для диалогового окна Настройка печати . Если этот флаг указан, система игнорирует элемент lpSetupTemplateName . |
|
Скрывает поле Печать в файл проверка. |
|
Скрывает и отключает кнопку Сеть . |
|
Отключает переключатель Pages и связанные элементы управления редактированием. Кроме того, в диалоговом окне появляется поле Сортировка проверка. |
|
Отключает переключатель Выбор . |
|
Предотвращает отображение предупреждающего сообщения при отсутствии принтера по умолчанию. |
|
Если этот флаг установлен, будет выбран переключатель Страницы . Если этот флаг установлен при возврате функции PrintDlg , элементы nFromPage и nToPage указывают начальную и конечную страницы, указанные пользователем. |
|
Заставляет систему отображать диалоговое окно "Настройка печати" , а не " Печать ". |
|
Если этот флаг установлен, будет выбрано поле Печать в файл проверка. Если этот флаг установлен при возврате функции PrintDlg , смещение, указанное членом wOutputOffset структуры DEVNAMES , содержит строку FILE:. При вызове функции StartDoc для запуска операции печати укажите эту строку FILE:в элементе lpszOutput структуры DOCINFO . Если указать эту строку, подсистема печати запрашивает у пользователя имя выходного файла. |
|
Заставляет PrintDlg возвращать контекст устройства, соответствующий выбранным пользователем в диалоговом окне. Контекст устройства возвращается в HDC. |
|
Если этот флаг установлен, функция PrintDlg не отображает диалоговое окно. Вместо этого он задает элементы hDevNames и hDevMode для обработки в структурах DEVMODE и DEVNAMES , которые инициализируются для системного принтера по умолчанию. Значения hDevNames и hDevMode должны иметь значение NULL, иначе PrintDlg возвращает ошибку. |
|
Аналогично флагу PD_RETURNDC , за исключением того, что этот флаг возвращает контекст сведений, а не контекст устройства. Если ни PD_RETURNDC , ни PD_RETURNIC не указаны, hDC не определен в выходных данных. |
|
Если этот флаг установлен, будет выбран переключатель Выбор . Если ни PD_PAGENUMS , ни PD_SELECTION не заданы, установлен переключатель Все . |
|
Вызывает отображение кнопки Справка в диалоговом окне. Член hwndOwner должен указать окно для получения зарегистрированных сообщений HELPMSGSTRING , которые диалоговое окно отправляет, когда пользователь нажимает кнопку Справка . |
|
То же, что и PD_USEDEVMODECOPIESANDCOLLATE. |
|
Этот флаг указывает, поддерживает ли приложение несколько копий и параметров сортировки. Установите этот флаг для входных данных, чтобы указать, что приложение не поддерживает несколько копий и параметров сортировки. В этом случае элемент 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_USEDEVMODECOPIESANDCOLLATEfalse функция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
Минимальное значение диапазона страниц, указанное в элементах управления " От" и "На ". Если 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 , которая может обрабатывать сообщения, предназначенные для диалогового окна Печать . Этот элемент игнорируется, если флаг PD_ENABLEPRINTHOOK не установлен в элементе Flags .
lpfnSetupHook
Тип: LPSETUPHOOKPROC
Указатель на процедуру перехватчика SetupHookProc , которая может обрабатывать сообщения, предназначенные для диалогового окна Настройка печати . Этот элемент игнорируется, если флаг PD_ENABLESETUPHOOK не установлен в элементе Flags .
lpPrintTemplateName
Тип: LPCTSTR
Имя ресурса шаблона диалогового окна в модуле, определяемом элементом hInstance . Этот шаблон заменяет шаблон диалогового окна печати по умолчанию. Этот элемент игнорируется, если в элементе Flags не установлен флаг PD_ENABLEPRINTTEMPLATE.
lpSetupTemplateName
Тип: LPCTSTR
Имя ресурса шаблона диалогового окна в модуле, определяемом элементом hInstance . Этот шаблон заменяет шаблон диалогового окна "Настройка печати " по умолчанию. Этот элемент игнорируется, если флаг PD_ENABLESETUPTEMPLATE не установлен в элементе Flags .
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) |
См. также раздел
Общая библиотека диалоговых окон
Основные понятия
Справочные материалы