Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
лаба8.doc
Скачиваний:
2
Добавлен:
12.11.2019
Размер:
982.02 Кб
Скачать

1.4.1. Инициализация структуры перед вызовом диалога выбора цвета

Минимально необходимая инициализация структуры CHOOSECOLOR заключается в обнулении структуры, установки размера структуры - поле lStructSize, в выборе начального цвета rgbResult и установка указателя lpCustColors на статический массив из шестнадцати цветов.

Пример инициализации структуры CHOOSECOLOR:

// обнуление структуры

memset(&cc, 0, sizeof(cc));

// обнуление массива цветов

memset(crCustColors, 0, sizeof(crCustColors));

// задается размер структуры

cc.lStructSize = sizeof(cc);

// устанавливаем указатель на массив цветов

cc.lpCustColors = crCustColors;

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

Пример вызова функции ChooseColor:

ChooseColor(&cc);

Функция ChooseColor:

BOOL ChooseColor( LPCHOOSECOLOR lpcc

// указатель на структуру с инициализированными данными

);

lpcc - указатель на структуру с данными для инициализации диалога

Возвращает ненулевой результат в случае успешного завершения, если пользователь нажал ОК, в противном случае возвращает ноль.

После возврата в успешном случае поле rgbResult содержит цвет, выбранный пользователем.

2. Операции с файлами. Создание, открытие файлов. Запись - чтение данных из файлов.

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

Порядок чтения/записи из файла можно рассматривать в виде следующей последовательности шагов:

  1. Открытие или создание файла с помощью функции CreateFile, которая возвращает дескриптор файла.

  2. Чтение данных из файла с помощью функции ReadFile или запись в файл с помощью функции WriteFile, куда в качестве первого параметра передается дескриптор файла, полученный на предыдущем шаге.

  3. Закрытие файла с помощью функции CloseHandle, в качестве параметра используется дескриптор файла.

Итак, рассмотрим каждый шаг.

2.1. Создание - открытие файла

Для создания или открытия существующего файла используется функция CreateFile.

HANDLE CreateFile(

LPCTSTR lpFileName, // указатель на строку - имя файла

DWORD dwDesiredAccess, // вид доступа (чтение - запись)

DWORD dwShareMode, // режим разделения

LPSECURITY_ATTRIBUTES lpSecurityAttributes, // указатель на атрибуты //безопасности

DWORD dwCreationDistribution, // способ создания

DWORD dwFlagsAndAttributes, // атрибуты файла

HANDLE hTemplateFile // дескриптор файла откуда скопировать атрибуты

);

lpFileName - указатель на строку оканчивающуюся нулевым символом, определяющую имя файла

dwDesiredAccess - определяет тип доступа к файлу, может быть комбинацией следующих значений:

GENERIC_READ - доступ на чтение

GENERIC_WRITE - доступ на запись

dwShareMode - набор битовых флагов, определяющий, как файл разделяется, если равен нулю - файл не разделяется

FILE_SHARE_READ - последующие операции открытия файла будут успешными, если он будет открываться для чтения

FILE_SHARE_WRITE - последующие операции открытия файла будут успешными, если он будет открываться для записи

lpSecurityAttributes - указывает на структуру SECURITY_ATTRIBUTE, которая определяет, может ли возвращаемый дескриптор наследоваться дочерними процессами, если равен NULL, дескриптор не может наследоваться.

dwCreationDistribution - определяет какие действия производить над существующими файлами, и над теми которые не существуют.

CREATE_NEW - функция возвращает отрицательный результат, если файл уже существует

CREATE_ALWAYS - функция всегда создает новый файл, перезаписывает, если такой файл уже существует

OPEN_EXISTING - функция открывает существующий файл, возвращает отрицательный результат, если такого файла нет

OPEN_ALWAYS - функция всегда открывает файл, если файл не существует, то создает его

dwFlagsAndAttributes - определяет атрибуты файла и флаги

Атрибуты

FILE_ATTRIBUTE_ARCHIVE - архивный файл

FILE_ATTRIBUTE_COMPRESSED - сжатый файл

FILE_ATTRIBUTE_HIDDEN - скрытый файл

FILE_ATTRIBUTE_NORMAL - никаких других атрибутов нет

FILE_ATTRIBUTE_READONLY - только для чтения

FILE_ATTRIBUTE_SYSTEM - системный файл, используется операционной системой

FILE_ATTRIBUTE_TEMPORARY - временный файл

Флаги

FILE_FLAG_WRITE_THROUGH - инструктирует систему не хранить промежуточные данные в кэше, а писать сразу на диск

FILE_FLAG_OVERLAPPED - инструктирует систему так инициализировать объект, что операции, которые занимают значительное время возвращали ERROR_IO_PENDING. Когда операция завершена специальное событие устанавливается, сообщая об этом.

FILE_FLAG_NO_BUFFERING - инструктирует систему открывать файл без промежуточного буфера и кэширования

FILE_FLAG_RANDOM_ACCESS - файл открывается с произвольным доступом

FILE_FLAG_SEQUENTIAL_SCAN - файл открывается с последовательным доступом

FILE_FLAG_DELETE_ON_CLOSE - файл стирается операционной системой после закрытия

hTemplateFile - определяет дескриптор файла-шаблона с доступом на чтение GENERIC_READ, с файла - шаблона копируются атрибуты создания

В случае успешного завершения возвращает дескриптор открытого файла, в противном случае возвращает значение INVALID_HANDLE_VALUE.

Пример открытия файла:

hSrc = CreateFile(ofn.lpstrFile, GENERIC_READ, 0, NULL,

OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);

Рассмотрим порядок чтения файлов.

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

DWORD GetFileSize(

HANDLE hFile, // дескриптор файла

LPDWORD lpFileSizeHigh //указатель на старшее слово для размера файла

);

hFile - дескриптор открытого файла

lpFileSizeHigh - указатель на переменную, в чье старшее слово будет возвращен размер файла, может быть NULL.

Возвращаемое значение - двойное слово, содержащее размер файла, при аварийном завершении возвращает 0xFFFFFFFF.

Пример вызова:

// определяем размер файла

fsize=GetFileSize(hSrc,NULL);

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