Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
193-224.doc
Скачиваний:
1
Добавлен:
11.11.2019
Размер:
378.88 Кб
Скачать

Диалоговое окно Page Setup

Диалоговое окно Page Setup (Параметры страницы) используется для установки параметров печатаемой страницы (рис. 7.14).

Рис. 7.14. Стандартное диалоговое окно Page Setup

Диалог является модальным. Он поддерживается классом CPageSetupDialog. Для его использования необходимо создать объект класса CPageSetupDialog, используя конструктор класса. Прототип конструктора следующий.

CPageSetupDialog( DWORD dwFlags = PSD_MARGINS | PSD_INWININIINTLMEASURE, CWnd* pParentWnd = NULL );

Параметры определяют настройки диалогового окна (dwFlags) и указатель на родительское окно (pParentWnd). Отображение диалогового окна выполняется методом CPageSetupDialog::DoModal(). Инициализацию диалогового окна до его отображения можно выполнить с помощью переменной m_psd типа структуры PAGESETUPDLG класса CPageSetupDialog, которая определена в файле commdlg.h следующим образом.

typedef struct tagPSD { // psd DWORD lStructSize; //размер структуры в байтах HWND hwndOwner; //дескриптор окна-владельца HGLOBAL hDevMode; //дескриптор объекта, содержащего // DEVMODE структуру для инициализации диалогового окна HGLOBAL hDevNames; //дескриптор объекта, содержащего //DEVNAMES структуру: имя драйвера, принтера и порта DWORD Flags; //флаги инициализации диалогового окна POINT ptPaperSize; //размеры документа RECT rtMinMargin; //минимальные границы полей документа RECT rtMargin; //текущие границы полей HINSTANCE hInstance; //дескриптор приложения LPARAM lCustData; //зависящие от приложения данные LPPAGESETUPHOOK lpfnPageSetupHook; //указатель на процедуру, //обрабатывающую сообщения, предназначенные диалоговому окну LPPAGEPAINTHOOK lpfnPagePaintHook; //указатель на процедуру, //обрабатывающую сообщения типа WM_PSD_ LPCTSTR lpPageSetupTemplateName; //указатель на имя //ресурса диалога HGLOBAL hPageSetupTemplate; //дескриптор объекта, //содержащего шаблон диалогового окна } PAGESETUPDLG, * LPPAGESETUPDLG;

Настройка диалогового окна включает порождение класса от CPageSetupDialog, создание пользовательского ресурса шаблона диалогового окна на основе стандартного из файла prnsetup.dlg, добавление таблицы сообщений для обработки уведомляющих сообщений от новых элементов управления.

Диалоговые окна Print и Print Setup

Хотя структуры приложений, сгенерированных мастером MFC Application Wizard, поддерживают возможности печати и настройки страницы, иногда программный код требует явного использования диалоговых окон Print (рис. 7.15), Print Setup и Page Setup.

Рис. 7.15. Стандартное диалоговое окно Print

Класс CPrintDialog поддерживает использование диалоговых окон Print и Print Setup. Для создания диалогового окна сконструируйте объект класса CPrintDialog, используя конструктор:

CPrintDialog( BOOL bPrintSetupOnly, DWORD dwFlags = PD_ALLPAGES | PD_USEDEVMODECOPIES | PD_NOPAGENUMS | PD_HIDEPRINTTOFILE | PD_NOSELECTION, CWnd* pParentWnd = NULL );

Параметры конструктора таковы: bPrintSetupOnly — тип диалогового окна (TRUE для окна Print Setup, FALSE для диалогового окна Print); dwFlags — флаги инициализации элементов управления; pParentWnd — указатель на родительское окно. Инициализировать элементы управления можно с помощью переменной-члена класса m_pd типа PRINTDLG. Структура PRINTDLG определена в файле commdlg.h. Предлагаем читателю обратиться к информации в MSDN Library Help (Microsoft Developer Network).

Для отображения диалогового окна используют функцию CPrintDialog::DoModal(). Функции GetDeviceName() и GetPrinterDC() класса CPrintDialog сохраняют выбранные пользователя значения. Прототипы функцій такие:

CString CPrintDialog::GetDeviceName() const; HDC CPrintDialog::GetPrinterDC() const;

Класс CPrintDialog можно использовать для получения контекста принтера без отображения диалогового окна. Для этой цели используют функцию CPrintDialog::CreatePrinterDC(). После выполнения необходимых действий в диалоговом окне необходимо удалять объект контекста устройства, а также все структуры DEVNAMES и DEVMODE посредством вызова функции ::GlobalFree(), прототип которой показан ниже.

HGLOBAL GlobalFree( HGLOBAL hMem );

Параметр hMem определяет дескриптор объекта m_pd.hDevMode, m_pd.hDevNames

Диалоговые окна Print и Print Setup можно изменять. Для этого создайте производный от CPrintDialog класс, пользовательский шаблон ресурса диалогового окна на основе шаблона из файла prnsetup.dlg, добавьте в него новые элементы управления. В карту сообщений включите уведомляющие сообщения и их обработчики.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]