Win32 API. Справочник по стандартному диалоговому окну
Страница 27. Структура PRINTDLG


Структура PRINTDLG

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

Синтаксис

typedef struct tagPD 
{
DWORD lStructSize;
HWND hwndOwner;
HANDLE hDevMode;
HANDLE hDevNames;
HDC hDC;
DWORD Flags;
WORD nFromPage;
WORD nToPage;
WORD nMinPage;
WORD nMaxPage;
WORD nCopies;
HINSTANCE hInstance;
DWORD lCustData;
LPPRINTHOOKPROC lpfnPrintHook;
LPSETUPHOOKPROC lpfnSetupHook;
LPCTSTR lpPrintTemplateName;
LPCTSTR lpSetupTemplateName;
HANDLE hPrintTemplate;
HANDLE hSetupTemplate;
} PRINTDLG;

Элементы
lStructSize
Определяет размер структуры, в байтах.
hwndOwner
Идентифицирует окно, которое владеет блоком диалога. Этот элемент может быть любым допустимым дескриптором окна, или это может быть значение ПУСТО (NULL), если диалоговое окно не имеет никакого владельца.
hDevMode
Идентифицирует перемещаемый объект глобальной памяти, который содержит структуру DEVMODE. Перед вызовом функции PrintDlg, элементы структуры могут содержать данные, используемые, чтобы инициализировать элементы управления диалогового окна. Когда PrintDlg возвращает значение, элементы структуры определяют состояние управляющих элементов диалогового окна.
Если вы используете структуру, чтобы инициализировать управляющие элементы диалогового окна, вы должны распределить доступное пространство памяти и создать структуру DEVMODE. (Вы должны распределить перемещаемый блок памяти).
Если вы не используете структуру, чтобы инициализировать управляющие элементы диалогового окна, hDevMode может иметь значение ПУСТО (NULL). В этом случае, PrintDlg распределяет память для структуры, инициализирует ее элементы и возвращает дескриптор, который идентифицирует структуру.
Если драйвер устройства для определяемого принтера не поддерживает расширенные режимы устройства, когда PrintDlg возвращает значение,то элемент hDevMode имеет значение ПУСТО (NULL).
Если имя устройства (определенное элементом dmDeviceName структуры DEVMODE) не появляется в разделе [devices (устройства)] WIN.INI, PrintDlg возвращает значение ошибки.
Потому что эта структура - перемещаемый объект глобальной памяти, значение которого в hDevMode может изменяться в ходе выполнения PrintDlg.
Для обсуждения того, как система решает возможный конфликт на уровне данных между значениями определеными элементами hDevMode и hDevNames, см. следующий раздел Замечаний.
hDevNamesDEVNAMES. Эта структура содержит три строки, которые определяют название драйвера, название принтера и имя порта вывода данных. Перед вызовом PrintDlg, элементы структуры содержат строки, используемые, чтобы инициализировать управляющие элементы диалогового окна. Когда PrintDlg возвращает значение, элементы структуры содержат строки, введенные с клавиатуры пользователем. Вызывающая прикладная программа использует эти строки, чтобы создать контекст устройства или информационный контекст.
Если вы используете структуру, чтобы инициализировать управляющие элементы диалогового окна, то должны распределить доступную память и создать структуру DEVNAMES. (Вы должны разместить перемещаемый блок общей памяти.)
Если вы не используете структуру, чтобы инициализировать управляющие элементы диалогового окна, hDevNames может иметь значение ПУСТО (NULL). В этом случае, PrintDlg распределяет память для структуры, инициализирует элементы (при помощи использования названия принтера, определяемого в структуре DEVMODE) и возвращает дескриптор, который идентифицирует ее. Функция PrintDlg использует первое название порта, которое принято в разделе [devices устройств] WIN.INI, когда она инициализирует элементы в структуре DEVNAMES. Например, функция использует "LPT1:" как имя порта, если следующая строка применена в разделее [devices устройств]:

PCL / HP LaserJet=HPPCL,LPT1:,LPT2:

Если и hDevMode, и hDevNames имеют значение ПУСТО (NULL), PrintDlg инициализирует hDevNames, используя текущий принтер, заданный по умолчанию.
Поскольку эта структура - перемещаемый объект глобальной памяти, значение hDevNames может изменяться в ходе выполнения PrintDlg.
Для обсуждения того, как система решает возможный конфликт на уровне данных между значениями определяемыми hDevNames и hDevMode, см. раздел Замечаний позже в этой статье.
hDC
Идентифицирует контекст устройства или информационный контекст, в зависимости от того, определяет ли элемент Flags флажок PC_RETURNIC или PD_RETURNDC. Если никакой флажок не установлен, значение этого элемента неопределено. Если оба флажка установлены, флажок PD_RETURNDC имеет приоритет.
Flags
Набор битовых флажков, который вы можете использовать, чтобы инициализировать стандартное диалоговое окно Печать (Print). Когда блок диалога возвращает значение, он устанавливает эти флажки, чтобы обозначить ввод данных пользователем. Этот элемент может быть комбинацией следующих флажков:

  • PD_ALLPAGES - Заданный по умолчанию флажок, который обозначает, что вначале была выбрана радио-кнопка Все (All). Этот флажок используется как символ - заместитель, чтобы обозначить, что флажки PD_PAGENUMS и PD_SELECTION не определены.
  • PD_COLLATE - Когда установливается ввод данных, ставит "галочку" в окошке метки Разложить по копиям (Collate),. Когда функция PrintDlg возвращает значение, этот флажок обозначает, что пользователь выбрал параметр Разложить по копиям (Collate), а драйвер принтера не поддерживает комплектовку. В данном случае, прикладная программа должна обеспечить комплектовку. Если функция PrintDlg устанавливает флажок PD_COLLATE при возврате значения, элемент dmCollate структуры DEVMODE неопределен.
  • PD_DISABLEPRINTTOFILE - Отключает окошко отмечаемого блока Печать в файл (Print to File).
  • PD_ENABLEPRINTHOOK - Включает фильтр (hook) - процедуру, определяемую в элементе lpfnPrintHook. Это включение разрешает работу фильтр (hook) - процедуры для диалогового окна Печать (Print).
  • PD_ENABLEPRINTTEMPLATE - Обозначает, что элементы hInstance и lpPrintTemplateName определяют шаблон диалогового окна, который используется вместо заданного по умолчанию шаблона для диалогового окна Печать (Print).
  • PD_ENABLEPRINTTEMPLATEHANDLE - Обозначает, что элемент hPrintTemplate идентифицирует блок данных, который содержит предварительно загруженный шаблон диалогового окна. Система использует этот шаблон вместо заданного по умолчанию шаблона для диалогового окна Печать (Print). Система игнорирует элемент lpPrintTemplateName, если этот флажок определен.
  • PD_ENABLESETUPHOOK - Включает фильтр (hook) - процедуру, определяемую в элементе lpfnSetupHook. Флажок включает фильтр (hook) - процедуру для диалогового окна Параметры печати (Print Setup).
  • PD_ENABLESETUPTEMPLATE - Обозначает, что элементы hInstance и lpSetupTemplateName определяют шаблон диалогового окна, который используется вместо заданного по умолчанию шаблона для диалогового окна Параметры печати (Print Setup).
  • PD_ENABLESETUPTEMPLATEHANDLE - Обозначает, что элемент hSetupTemplate идентифицирует блок данных, который содержит предварительно загруженный шаблон диалогового окна. Система использует этот шаблон вместо заданного по умолчанию шаблона для диалогового окна Параметры печати (Print Setup). Система игнорирует элемент lpSetupTemplateName, если этот флажок определен.
  • PD_HIDEPRINTTOFILE - Скрывает окошко отмечаемого блока Печатать в файл (Print to File).
  • PD_NOPAGENUMS - Отключает радио-кнопки блока Страницы (Pages) и связанные с ним поля редактирования текста.
  • PD_NOSELECTION - Отключает радио-кнопку Выделенный фрагмент (Selection).
  • PD_NOWARNING - Не допускает показа предупреждающего сообщения на экране, когда нет никакого заданного по умолчанию принтера.
  • PD_PAGENUMS - Заставляет радио-кнопки блока Страницы (Pages), быть в выбранном состоянии, когда диалоговое окно создано. Когда функция PrintDlg возвращает значение, этот флажок установливает радио-кнопки блока Страницы (Pages) находится в выбранном состоянии.
  • PD_PRINTSETUP - Заставляет систему показать на экране диалоговое окно Параметры печати (Print Setup), а не диалоговое окно Печать (Print).
  • PD_PRINTTOFILE - Заставляет окошко отмечаемого блока Печать в файл(Print to File) быть отмеченым "галочкой", когда диалоговое окно создано. Когда функция PrintDlg возвращает значение, этот флажок установлен, если окошко отмечено "галочкой". В данном случае, смещение, указанное элементом wOutputOffset структуры DEVNAMES содержит строку " ФАЙЛ: ". Когда вы вызываете функцию StartDoc, чтобы начать операцию печати, определите эту строку " ФАЙЛ: " в элементе lpszOutput структуры DOCINFO. Определение этой строки вынуждает) подсистему печати сделать запрос пользователю, чтобы он определил название выходного файла.
  • PD_RETURNDC - Заставляет функцию PrintDlg возвратить контекст устройства, соответствующий выбору пользователя, сделанному в диалоговом окне. Контекст устройства возвращается в hDC.
  • PD_RETURNDEFAULT - Функция PrintDlg не показывает на экране диалоговое окно. Вместо этого, она устанавливает в элементах hDevNames и hDevMode дескрипторы структур DEVMODE и DEVNAMES, которые инициализированы для системного принтера по умолчанию. И hDevNames, и hDevMode должны иметь значение ПУСТО (NULL), или PrintDlg возвратит значение ошибки. Если системный по умолчанию принтер поддерживается старым драйвером принтера (ранее чем версия 3.0 Windows), значение возвращает только hDevNames; у элемента hDevMode - значение ПУСТО (NULL).
  • PD_RETURNIC - Подобен флажку PD_RETURNDC, за исключением того, что этот флажок возвращает информационный контекста не контекст устройства. Если ни PD_RETURNDC ни PD_RETURNIC не определен, hDC при выводе данных неопределен.
  • PD_SELECTION - Заставляет блок радио-кнопок Выбор (Selection) быть в выбранном состоянии, когда диалоговое окно создано. Когда PrintDlg возвращает значение, если радио-кнопка в блоке Выбор (Selection) выбрана, этот флажок определен. Если ни флажок PD_PAGENUMS, ни флажок PD_SELECTION не установлен, то выбрана радио-кнопка Все (All).
  • PD_SHOWHELP - Заставляет диалоговое окно показать на экране кнопку Справка (Help). Элемент hwndOwner должен определить окно, чтобы принять зарегистрированные сообщения HELPMSGSTRING, которые блок диалога передает, когда пользователь щелкает кнопкой мыши по кнопке Справка (Help).
  • PD_USEDEVMODECOPIES - Такой же как PD_USEDEVMODECOPIESANDCOLLATE
  • PD_USEDEVMODECOPIESANDCOLLATE - Отключает поле редактирования текста Число копий (Copies), если драйвер принтера не поддерживает многочисленные копии, и отключает переключатель Разложить по копиям (Collate), если драйвер принтера не поддерживает комплектовку. Если этот флажок не определен, PrintDlg сохраняет выбор пользователем параметров Число копий (Copies) и Разложить по копиям (Collate) в элементах dmCopies и dmCollate структуры DEVMODE. Если этот флажок не установлен, информация о копировании и раскладке по копиям возвращается в структуре DEVMODE, если драйвер поддерживает многочисленные копии и комплектовку. Если драйвер не поддерживает многочисленные копии и комплектовку, информация возвращается в структуре PRINTDLG. Это означает, что прикладная программа должна только рассмотреть nCopies и PD_COLLATE, чтобы установить, сколько копий требуется выполнить и требуется ли при печатати раскладывать их по копиям.

nFromPage
Определяет исходное значение для начального поля редактирования текста страницы. Когда функция PrintDlg возвращает значение, элемент nFromPage определяет, что начальная страница задана пользователем. Это значение правильно, только в том случае, если определен флажок PD_PAGENUMS.
nToPage
Определяет исходное значение для конечного поля редактирования текста страницы. Когда функция PrintDlg возвращает значение, элемент nToPage определяет, что конечная страница задана пользователем. Это значение правильно, только в том случае, если определен флажок PD_PAGENUMS.
nMinPage
Определяет минимальное значение для диапазона страниц, определяемых в редактируемых полях От (From) и До (To).
nMaxPage
Определяет максимальное значение для диапазона страниц, определяемых в редактируемых полях От (From) и До (To).
nCopies
Если элемент hDevMode имеет значение ПУСТО (NULL), то содержит исходный тираж для поля редактирования в блоке Копии (Copies); иначе, элемент dmCopies структуры DEVMODE содержит начальное значение. Когда PrintDlg возвращает значения, этот элемент содержит фактический тираж для печати. Если драйвер принтера не поддерживает многочисленные копии, это значение может быть большее чем одна копия и прикладная программа должна отпечатать все запрошенные копии. Если в элементе Flags установлено значение PD_USEDEVMODECOPIESANDCOLLATE, nCopies, при возврате, всегда устанавливается в 1, а элемент dmCopies в DEVMODE принимает фактический тираж, для печати.
hInstance
Если в элементе Flags установлен флажок PD_ENABLEPRINTTEMPLATE или PD_ENABLESETUPTEMPLATE, hInstance - дескриптор прикладной программы или экземпляра модуля, который содержит шаблон диалогового окна, именованный элементом lpPrintTemplateName или lpSetupTemplateName.
lCustData
Устанавливает определяемые программой данные, которые система передает фильтр (hook) - процедуре, идентифицированной элементом lpfnPrintHook или lpfnSetupHook. Когда система посылает сообщение WM_INITDIALOG фильтр (hook) - процедуре, параметр сообщения lParam - указатель на структуру PRINTDLG, которая была определена, когда диалоговое окно было создано. Фильтр (hook) - процедура может использовать этот указатель, чтобы получить значение lCustData.
lpfnPrintHook
Указатель на фильтр (hook) - процедуру PrintHookProc, которая может обрабатывать сообщения, предназначенные для диалогового окна Печать (Print). Этот элемент игнорируется, если в элементе Flags не установлен флажок PD_ENABLEPRINTHOOK.
lpfnSetupHook
Указатель на фильтр (hook) - процедуру SetupHookProc, которая может обрабатывать сообщения, предназначенные для диалогового окна Параметры печати (Print Setup). Этот элемент игнорируется, если в элементе Flags не установлен флажок PD_ENABLESETUPHOOK.
lpPrintTemplateName
Указатель на строку с символом нуля в конце, которая именует ресурс шаблона диалогового окна в модуле, идентифицированном элементом hInstance. Этот шаблон замещает стандартный шаблон диалогового окна Печать (Print). Этот элемент игноририруется, если в элементе Flags не установлен флажок PD_ENABLEPRINTTEMPLATE.
lpSetupTemplateName
Указатель на строку с символом нуля в конце, которая именует ресурс шаблона диалогового окна в модуле, идентифицированном элементом hInstance. Этот шаблон замещает стандартный шаблон диалогового окна Параметры печати (Print Setup). Этот элемент игноририруется, если в Элементе Flags не установлен флажок PD_ENABLESETUPTEMPLATE.
hPrintTemplate
Если в элементе Flags установлен флажок PD_ENABLEPRINTTEMPLATEHANDLE, hPrintTemplate - дескриптор объекта памяти, содержащего шаблон диалогового окна. Этот шаблон замещает стандартный шаблон диалогового окна Печать (Print).
hSetupTemplate
Если в элементе Flags установлен флажок PD_ENABLESETUPTEMPLATEHANDLE, hSetupTemplate - дескриптор объекта памяти, содержащего шаблон диалогового окна. Этот шаблон замещает стандартный шаблон диалогового окна Параметры печати (Print Setup).

Замечания
Имеется возможность конфликта на уровне данных между значениями, определяемыми элементами hDevNames и hDevMode, потому что элемент wDeviceOffset структуры DEVNAMES, как предполагается, является идентичным элементу dmDeviceName структуры DEVMODE. Если это не так, система решает конфликт на уровне данных при помощи использования значения wDeviceOffset.
Если пользователь отмечает "галочкой" окошко метки Разобрать по копиям (Collate) в стандартном диалоговом окне Печать (Print), но драйвер принтера не поддерживает комплектовку, элемент Flags структуры PRINTDLG, возвращенный при помощи PrintDlg включает в себя флажок PD_COLLATE. Кроме того, элемент dmCollate структуры DEVMODE, идентифицированной элементом hDevMode установливается в COLLATE_TRUE. Если флажок PD_COLLATE установлен, прикладная программа должна симулировать комплектовку.
Если флажок PD_USEDEVMODECOPIESANDCOLLATE установлен, окошко метки Разобрать по копиям (Collate) внешне недоступно, если драйвер принтера не поддерживает комплектовку. Это гарантирует то, что пользователь может только выбирать одну копию, и в элементе nCopies будет единица. Если драйвер поддерживает многочисленные копии, dmCopies будет содержать тираж, а в nCopies будет единица.
При записи в функцию PrintDlg, элемент nCopies структуры PRINTDLG определяет тираж, если флажок PD_USEDEVMODECOPIESANDCOLLATE не установлен. При выходе из PrintDlg, nCopies содержит тираж, если драйвер принтера не поддерживает многочисленные копии. Иначе он устанавливается в единицу. Если nCopies больше чем единица при выходе из PrintDlg, прикладная программа должна отпечатать многочисленные копии документа.

Смотри также
CreateDC, CreateIC, PrintDlg, DEVMODE, DEVNAMES, WM_INITDIALOG

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

Windows NTДа 
Win95Да
Win32sДа
Импортируемая библиотека-
Заголовочный файлwinspool.h
UnicodeWinNT
Замечания по платформеНе имеется

 
« Предыдущая статья   Следующая статья »