Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Ch-15.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
676.86 Кб
Скачать

Вызов функции PrinterProperties

В меню Device программы DEVCAPS2 включена опция Properties (свойства). Для ее использования нужно сначала выбрать принтер из меню Device. При выборе опции Properties появляется всплывающее окно диалога. Откуда берется это окно диалога? Оно вызывается драйвером принтера, который требует, как минимум, задать размер листа. В большинстве драйверов принтера также предлагается выбор режима печати: portrait или landscape. Режим portrait (часто задаваемый по умолчанию) подразумевает, что узкая сторона листа находится сверху; а в режиме landscape вверху находится широкая сторона листа. При изменении режима, оно отражается в информации, которую программа DEVCAPS2 получает от функции GetDeviceCaps: горизонтальные размер и разрешающая способность меняются на вертикальные размер и разрешающую способность. Диалоговые окна свойств цветных плоттеров могут быть достаточно громоздкими, в которых задаются цвета установленных в плоттере перьев и тип используемой бумаги.

В Windows 95 во всех драйверах принтера имеется экспортируемая функция ExtDeviceMode, которая вызывает окно диалога и сохраняет заданную пользователем информацию. Некоторые драйверы принтера сохранят полученную информацию в реестре или в их собственной секции файла WIN.INI. Те, которые сохраняют эту информацию, получают к ней доступ и в следующем сеансе работы Windows.

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

Программа может также вывести на экран окно диалога свойств принтера напрямую, вызывая из драйвера принтера функции ExtDeviceMode или ExtDeviceModePropSheet. Однако, это не рекомендуется. Гораздо лучше вызывать окна диалога косвенно, с помощью функции PrinterProperties. Эта функция GDI может обеспечить доступ к 16-разрядным драйверам принтера, в то время как ваша 32-разрядная программа не имеет к ним доступа (до тех пор, пока вы не напишете свой код, позволяющий это сделать, thunk).

Для функции PrinterProperties необходим описатель принтера, который получают с помощью вызова функции OpenPrinter. Когда пользователь закрывает окно свойств, функция PrinterProperties возвращает управление. Затем, полученный описатель принтера можно закрыть с помощью функции ClosePrinter. Так делается в программе DEVCAPS2.

Сначала программа получает имя выбранного в данный момент в меню Device принтера и сохраняет его в символьном массиве szDevice:

GetMenuString (hMenu, nCurrentDevice, szDevice,

sizeof (szDevice), MF_BYCOMMAND) ;

Затем, с помощью функции OpenPrinter, она получает описатель этого устройства. Если вызов функции прошел удачно, то для вывода на экран окна диалога программа вызывает функцию PrinterProperties, а затем для закрытия описателя устройства функцию ClosePrinter :

if (OpenPrinter (szDevice, &hPrint, NULL))

{

PrinterProperties (hwnd, hPrint) ;

ClosePrinter (hPrint) ;

}

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