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


Диалоговое окно «Параметры страницы»

Отображает модальное диалоговое окно, позволяющее пользователю задать следующие атрибуты печатной страницы:

  • Тип бумаги (конверт, юридический, почтовый и т. д.)
  • Источник бумаги (ручная подача, корм для трактора, подач листа и т. д.)
  • Ориентация страницы (книжная или альбомная)
  • Ширина полей страницы

Диалоговое окно Параметры страницы создается и отображается путем инициализации структуры PAGESETUPDLG и передачи структуры в функцию PageSetupDlg . Однако атрибуты, представленные в диалоговом окне, различаются в зависимости от возможностей принтера. На следующем рисунке показано типичное диалоговое окно "Параметры страницы ".

диалоговое окно настройки страницы

Если пользователь нажимает кнопку ОК , pageSetupDlg возвращает значение TRUE после задания различных элементов в структуре PAGESETUPDLG , чтобы указать выбор пользователя. Элементы ptPaperSize и rtMargin содержат значения, указанные пользователем. Члены hDevMode и hDevNames содержат дескриптор глобальной памяти для структур DEVMODE и DEVNAMES . Эти структуры содержат дополнительные сведения о страницах, а также сведения о принтере. Эти сведения можно использовать для подготовки выходных данных к отправке на выбранный принтер.

Если пользователь отменяет диалоговое окно "Настройка страницы" или возникает ошибка, PageSetupDlg возвращает значение FALSE. Чтобы определить причину ошибки, вызовите функцию CommDlgExtendedError , чтобы получить расширенное значение ошибки.

В этом разделе рассматриваются следующие темы.

Инициализация диалогового окна "Настройка страницы"

По умолчанию в диалоговом окне Параметры страницы отображаются сведения о текущем принтере по умолчанию. Чтобы в диалоговом окне отображались сведения о конкретном принтере, задайте элементы структуры DEVMODE или DEVNAMES и назначьте дескриптор глобальной памяти этих структур соответствующему члену в PAGESETUPDLG. Если указать имя принтера, который в настоящее время не установлен, в диалоговом окне отобразится сообщение об ошибке. Чтобы предотвратить отображение сообщений об ошибках в диалоговом окне, используйте значение PSD_NOWARNING . Чтобы получить сведения о принтере по умолчанию без отображения диалогового окна Параметры страницы , используйте значение PSD_RETURNDEFAULT .

Если по умолчанию используется система измерения в дюймах, в диалоговом окне в качестве единицы измерения по умолчанию используется тысячные дюймы. Если по умолчанию используется метрика, в диалоговом окне в качестве единицы измерения по умолчанию используются сотые миллиметры. Чтобы переопределить единицу измерения по умолчанию, установите флаг PSD_INHUNDREDTHSOFMILLIMETERS или PSD_INTHOUSANDTHSOFINCHES в элементе Flags структуры PAGESETUPDLG .

Начальные значения полей по умолчанию — один дюйм. Если вы задали флаг PSD_MARGINS , в диалоговом окне отображаются начальные значения полей, указанные в элементе rtMargin . Минимальные значения по умолчанию, которые пользователь может указать для полей, — это минимальные поля, разрешенные принтером. Если задать флаг PSD_MINMARGINS , в диалоговом окне будут применяться минимальные поля, указанные в элементе rtMinMargin .

Чтобы запретить пользователям выбирать определенные параметры, установите любое сочетание следующих флагов, чтобы отключить соответствующие элементы управления.

Flag Значение
PSD_DISABLEMARGINS Отключает элементы управления редактированием, в которых пользователь вводит параметры полей.
PSD_DISABLEORIENTATION Отключает переключатели Книжная и Альбомная .
PSD_DISABLEPAPER Отключает элементы управления для выбора размера бумаги и источника бумаги.
PSD_DISABLEPRINTER Отключает кнопку Принтер .

 

Настройка диалогового окна "Настройка страницы"

Вы можете указать пользовательский шаблон для диалогового окна Параметры страницы , например, если требуется включить дополнительные элементы управления, уникальные для вашего приложения. Функция PageSetupDlg использует пользовательский шаблон вместо шаблона по умолчанию.

Предоставление пользовательского шаблона для диалогового окна "Настройка страницы"

  1. Создайте пользовательский шаблон, изменив шаблон по умолчанию, указанный в файле Prnsetup.dlg. Идентификаторы элементов управления, используемые в шаблоне диалогового окна "Настройка страницы " по умолчанию, определяются в файле Dlgs.h.
  2. Используйте структуру PAGESETUPDLG , чтобы включить шаблон следующим образом:
      • Если настраиваемый шаблон является ресурсом в приложении или библиотеке динамической компоновки, установите флаг PSD_ENABLEPAGESETUPTEMPLATE в элементе Flags . Используйте элементы hInstance и lpPageSetupTemplateName структуры, чтобы определить имя модуля и ресурса.

        -Или-

      • Если пользовательский шаблон уже находится в памяти, установите флаг PSD_ENABLEPAGESETUPTEMPLATEHANDLE . Используйте элемент hPageSetupTemplate для идентификации объекта памяти, содержащего шаблон.

Чтобы отфильтровать сообщения, отправленные в процедуру диалогового окна, можно указать процедуру перехватчика PageSetupHook . Если вы используете пользовательский шаблон для определения дополнительных элементов управления, необходимо предоставить процедуру перехватчика PageSetupHook для обработки входных данных для элементов управления. Кроме того, можно предоставить процедуру перехватчика PagePaintHook для настройки содержимого примера страницы, отображаемой в диалоговом окне Параметры страницы . Дополнительные сведения о процедуре перехватчика PagePaintHook см. в разделе Настройка примера страницы.

Включение процедуры перехватчика PageSetupHook

  1. Установите флаг PSD_ENABLEPAGESETUPHOOK в элементе Flags структуры PAGESETUPDLG .
  2. Укажите адрес процедуры перехватчика в элементе lpfnPageSetupHook .

После обработки WM_INITDIALOG сообщения процедура диалогового окна отправляет WM_INITDIALOG сообщение в процедуру перехватчика PageSetupHook . Параметр lParam этого сообщения является указателем на структуру PAGESETUPDLG , используемую для инициализации диалогового окна.

Настройка примера страницы

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

При вызове функции PageSetupDlg можно предоставить процедуру перехватчика PagePaintHook для настройки внешнего вида примера страницы.

Включение процедуры перехватчика PagePaintHook

  1. Установите флаг PSD_ENABLEPAGEPAINTHOOK в элементе Flags структуры PAGESETUPDLG .
  2. Укажите адрес процедуры перехватчика в элементе lpfnPagePaintHook .

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

Сообщение Значение
WM_PSD_PAGESETUPDLG Диалоговое окно вот-вот нарисует пример страницы. Процедура перехватчика может использовать это сообщение для подготовки к рисованию содержимого примера страницы.
WM_PSD_FULLPAGERECT Диалоговое окно вот-вот нарисует пример страницы. Это сообщение указывает ограничивающий прямоугольник примера страницы.
WM_PSD_MINMARGINRECT Диалоговое окно вот-вот нарисует пример страницы. В этом сообщении указывается прямоугольник поля.
WM_PSD_MARGINRECT Диалоговое окно будет нарисовывать прямоугольник поля.
WM_PSD_GREEKTEXTRECT Диалоговое окно будет нарисовывать греческий текст внутри прямоугольника поля.
WM_PSD_ENVSTAMPRECT Диалоговое окно будет нарисована в прямоугольнике конвертной марки страницы образца конверта. Это сообщение отправляется только для конвертов.
WM_PSD_YAFULLPAGERECT Диалоговое окно нарисует часть возвращаемого адреса страницы примера конверта. Это сообщение отправляется для конвертов и других размеров бумаги.

 

Если процедура перехватчика возвращает значение TRUE для любого из первых трех сообщений последовательности рисования (WM_PSD_PAGESETUPDLG, WM_PSD_FULLPAGERECT или WM_PSD_MINMARGINRECT), диалоговое окно больше не отправляет сообщения и не рисует пример страницы до следующего раза, когда системе потребуется перерисовать пример страницы. Если процедура перехватчика возвращает значение FALSE для всех трех сообщений, диалоговое окно отправляет оставшиеся сообщения последовательности рисования.

Если процедура перехватчика возвращает значение TRUE для любого из оставшихся сообщений в последовательности рисования, диалоговое окно не рисует соответствующую часть примера страницы. Если процедура перехватчика возвращает значение FALSE для любого из этих сообщений, диалоговое окно рисует эту часть примера страницы.

Чтобы предотвратить рисование содержимого примера страницы в диалоговом окне, можно установить флаг PSD_DISABLEPAGEPAINTING . Этот флаг не влияет на процедуру перехватчика PagePaintHook , которая по-прежнему получает все сообщения WM_PSD_* и может рисовать содержимое страницы образца.