Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции-ТРПС.doc
Скачиваний:
13
Добавлен:
15.11.2018
Размер:
810.5 Кб
Скачать

10.4. Специализированные функции для работы с файлами

Одним из компонентов Windows являются так называемые файлы инициализации, имеющие расширение .INI. Это обычные текстовые файлы, однако их отличительная особенность состоит в том, что они имеют специальную структуру:

[Section] Key=Value

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

Чтение значения ключа szKey из секции szSection файла szFilePath проводится функцией

GetPrivateProfileString( LPCTSTR szSection, LPCTSTR szKey, LPCTSTR szDefVal, LPTSTR szValue, DWORD nValue, LPCTSTR szFilePath)

если ключ в указанной секции отсутствует, в буфер szValue будет записано значение по умолчанию, указанное в szDefVal.

Запись нового значения szValue ключа szKey в секции szSection осуществляется функцией

WritePrivateProfileString( LPCTSTR szSection, LPCTSTR szKey, LPCTSTR szValue, LPCTSTR szFilePath);

Как правило, *.INI файлы расположены в той директории, в которую была установлена операционная система. Если в строке szFilePath указано только имя файла, то он будет расположен в этой Windows директории. Если же szFilePath содержит полный путь, то Windows директория будет проигнорирована.

Две функции GetProfileString() и WriteProfileString() специально предназначены для работы с Win.ini файлом.

11. Печать документов

В прежние времена разработчикам приходилось много времени тратить на то, чтобы предусмотреть возможность печати различных документов на всевозможных принтерах. Разные типы принтеров, требовали тонкой и специфической настройки, поскольку разные модели использовали различную систему команд. Теперь эта забота входит в зону ответственности Windows. Разработчик же должен получить контекст принтера, и с помощью обычных GDI функций “отрисовать” документ в этом контексте. Другими словами вы имеете “страницу”, отображаете в любой его части, в любой последовательности то, что нужно, и когда эта “страница” полностью сформирована, отправляете ее на печать. Только в этот момент происходит проигрывание созданного Windows метафайла в контексте устройства принтера, а не тогда когда вы делаете отрисовку.

11.1. Последовательность печати документа

1. Получить или создать контекст устройства принтера.

2. Создать немодальный диалог для отмены печати.

3. Активизировать процесс “спуллинга” печати.

4. “Нарисовать” каждую страницу документа, отправляя ее на печать по мере готовности.

5. Завершить процесс “спуллинга” печати.

6. Закрыть немодальный диалог и освободить контекст устройства принтера.

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

BOOL g_UserBreak = FALSE; HWND hDlgBreak;

Первая – выполняет роль флага, сигнализирующего о том, что пользователь решил отменить печать документа, нажав кнопку отмены в немодальном диалоге, имеющем дескриптор hDlgBreak.

11.2. Контекст устройства принтера

Наиболее простой путь получения дескриптора контекста устройства принтера – это использование стандартного Windows диалога. Программный код может выглядеть примерно так:

// дескриптор контекста принтера HDC PrnDC; // структура инициализации диалога PRINTDLG pd; pd.Flags = PD_RETURNDC; if (PrintDlg(&pd)) { // сохранить дескриптор контекста принтера PrnDC = pd.hDC; }

Второй путь связан с созданием дескриптора контекста принтера с помощью вызова функции CreateDC()

HDC CreateDC(LPCTSTR szDriver, LPCTSTR szDevice, LPCTSTR szOutput, DEVMODE* pInitData),

которая возвращает искомый контекст при задании следующих параметров:

szDriver - имя драйвера, обслуживающего принтер, например, “escp2ms”;

szDevice - имя принтерного устройства, например, “Epson LQ-100”;

szOutput - имя порта, к которому подключен принтер, например, “LPT1:”;

pInitData - указатель на структуру DEVMODE, поля которой содержат дополнительную информацию о специфической настройке принтера. Например, можно изменить размер бумажного листа, его ориентацию при печати, размер полей и прочее.

В Windows 95 получить сведения обо всех установленных принтерах можно из файла Win.ini, который содержит секцию Devices. Эта секция выглядит примерно так:

[Devices] Epson LQ-100=ESCP2MS,LPT1:

что означает, что в системе имеется один принтер с именем Epson LQ-100, который обслуживается драйвером ESCP2MS и подключен принтер к порту LPT1:.

Для Windows NT информация об установленных принтерах располагается в системном реестре.