Смекни!
smekni.com

Механизмы взаимодействия приложения с пользователем (стр. 1 из 3)

МЕХАНИЗМЫ ВЗАИМОДЕЙСТВИЯ ПРИЛОЖЕНИЯ С

ПОЛЬЗОВАТЕЛЕМ

План

Файл ресурсов

Меню приложения

Акселераторы

Файл ресурсов

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

иконки

курсоры мыши.

используемые в программе изображения;

строки символов;

меню;

ускорители клавиатуры;

диалоговые окна;

шрифты;

ресурсы, определяемые пользователем.

Помимо того, что ресурсы определяются до начала работы программы и добавляются в исполняемый файл, у них есть еще одна характерная черта. При загрузке bin-файла в память, РЕСУРСЫ В ПАМЯТЬ НЕ ЗАГРУЖАЮТСЯ. Только в случае, если тот или иной ресурс требуется для работы программы, программа сама загружает ресурс в память.

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

Все ресурсы, заранее определенные в Win32 API, называются стандартными.

Существует пять типов однострочного описания ресурса:

BITMAP.

CURSOR.

ICON.

FONT.

MESSAGETABLE.

Каждый из этих операторов загружает файл данных указанного типа в данные ресурса. После включения этих данных в данные ресурса могут применяться функции LoadBitmap (), LoadCursor () и LoadIcon () для непосредственного доступа к соответствующим данным в программе.

1. Функция LoadBitmap () загружает ресурс растрового изображения из файла ресурсов. В файле описания ресурсов приложения необходимо указать растровое изображение с помощью оператора BITMAP. Формат оператора имеет следующий вид:

BITMAPNAMEBITMAP "BITMAPFILE. BMP"

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

HBITMAP LoadBitmap (HINSTANCE hInst, LPCTSTR lpszBitmap)

Параметры:

hInst - хэндл приложения, в которое загружается растровое изображение;

lpsz Bitmap - указатель на строку с нулевым символом в конце, которая содержит имя ресурса растрового изображения, подлежащего загрузке.

Возвращаемое значение: при успешном выполнении - хендл загруженного растрового изображения, иначе - NULL.

Функция DeleteObject () удаляет логический объект, для создания которых применяется достаточно много функций. Синтаксис функции следующий.

BOOL DeleteObject (HGDIOBJ hGdiObject)

Параметры:

hGdiObject - хэндл объекта GDI. Этот параметр должен указывать хендл пера, растрового изображения, кисти, области, палитры или шрифта.

Возвращаемое значение: при успешном выполнении - TRUE, иначе - FALSE.

2. Функция LoadCursor () загружает ресурс курсора из файла ресурсов. Если курсор загружен в составе определения класса окна, то курсор мыши, находясь в пределах клиентской области окна, будет принимать форму загруженного курсора. В файле описания ресурсов приложения необходимо указать пиктограмму с помощью оператора CURSOR. Формат оператора имеет следующий вид:

CURSORNAMECURSOR"CURSORFILE. CUR"

Если требуется в разное время иметь разные формы курсора в клиентской области окна, то форма курсора класса окна должна быть установлена в NULL, а курсор должен быть указан путем вызова функции SetCursor () при получении каждого сообщения WM_SETCURSOR. Синтаксис функций следующий:

HCURSOR LoadCursor (HINSTANCE hInst, LPCTSTR lpszCursor)

Параметры:

hInst - хэндл приложения, в которое загружается курсор. Для загрузки системного курсора параметр hInst должен быть равным NULL;

lpszCursor - указатель на строку с нулевым символом в конце, которая содержит имя ресурса курсора, подлежащего загрузке. Если задан системный курсор, то параметр должен принимать одно из значений идентификаторов IDC_.

Возвращаемое значение: при успешном выполнении - хендл загруженного курсора, иначе - NULL.

3. Функция LoadIcon () загружает пиктограмму из файла ресурсов. В файле описания ресурсов приложения необходимо указать пиктограмму с помощью оператора ICON. Формат оператора имеет следующий вид:

ICONNAMEICON "ICONFILE. ICO"

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

HICON LoadIcon (HINSTANCE hInst, LPCTSTR lpszIcon)

Параметры:

hInst - хэндл приложения, в которое загружается растровое изображение;

lpszIcon - указатель на строку с нулевым символом в конце, которая содержит имя ресурса пиктограммы, подлежащей загрузке. Если задан системная пиктограмма, то параметр должен принимать одно из значений идентификаторов IDI_.

Возвращаемое значение: при успешном выполнении - хендл загруженной пиктограммы, иначе - NULL.

4. Функция AddFontResource () обычно используется для ввод ресурса шрифта из файла в таблицу шрифтов Windows. Таблица шрифтов содержит данные о шрифтах, доступных для приложения Windows. В качестве имен файлов шрифтов может быть указано:

файл. FON ресурса шрифта;

файл. FNT первичного растрового шрифта;

файл. TTF первичного шрифта TrueType;

файл. TTC коллекции шрифтов TrueType;

файл. FOT ресураса TrueType;

файл. OTF шрифта OpenType PostScript;

файл. MMM ресурса шрифта Type 1 с несколькими базовыми шрифтами;

файл. PFB двоичного представления шрифта Type 1;

файл. PFM метрики шрифта Type 1.

Синтаксис функции следующий:

int AddFontResource (LPCTSTR lpszFileName)

Параметры:

lpszFileName - указатель на строку с нулевым символом в конце, которая содержит допустимое имя файла шрифта.

Возвращаемое значение: при успешном выполнении - число добавленных шрифтов, иначе - NULL.

Если необходимо ввести шрифт, данные которого должны быть получены из нескольких файлов ресурса, в качестве параметра lpszFileName необходимо указать имена всех этих файлов, разделенные символом (|).

Окнам верхнего уровня должно быть отправлено сообщение WM_FONTCHANGE, чтобы работающие программы получили информацию об изменении состава доступных шрифтов. Удаляет из таблицы шрифтов Windows шрифты, содержащиеся в указанном файле, функция RemoveFontResource (). Обычно она применяется при обработке сообщения WM_DESTROY для удаления добавленных ресурсов шрифта. Синтаксис функции следующий:

BOOL RemoveFontResource (LPCTSTR lpszFileName)

Параметры:

lpszFileName - указатель на строку с нулевым символом в конце, которая содержит имя файла ресурса шрифта.

Возвращаемое значение: при успешном выполнении - TRUE, иначе - NULL.

Работу со шрифтами рассмотрим позже.

5. Для загрузки сообщений из файла ресурса служит функция FormatMessage (). О ней также позже.

Существует пять типов многострочного описания ресурса:

MENU.

ACCELERATORS.

DIALOG.

STRINGTABLE.

RCDATA.

Многострочные типы описания ресурсов легко распознать. В них для определения блоков данных ресурса используются операторы BEGIN и END. Наиболее простое описание ресурсов это:

Таблицы строк (STRINGTABLE)

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

STRINGTABLE

BEGIN

IDS_STRING1"Строка 1"

IDS_STRING2"Строка 2"

IDS_STRING3"Строка 3"

END

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

Для использования этих данных в приложении служит функция LoadString ().

Фукнция LoadString (). Каждая строка таблицы получает свой идентификатор. Функция LoadString () копирует символьные данные из файла ресурса в буфер памяти, чтобы с ней можно было выполнить необходимые действия и отобразить. Строки в таблице могут содержать управляющие символы, такие как символы табуляции и символы новой строки. Синтаксис функции следующий:

int LoadString (HINSTANCE hInst, UINT uID, LPTSTR lpBuffer, int nBuffer)

Параметры:

hInst - хэндл приложения, в которое загружается строка;

uID - идентификационное значение для строки в таблице строк. Этот параметр обозначает позицию слева от строки в файле ресурса;

lpBuffer - указатель на буфер, который примет символьную строку. Буффер должен иметь длину не менее nBuffer символов типа TCHAR;

nBuffer - максимальное число символов, которые должны быть скопированы в буфер lpBuffer.

Возвращаемое значение: при успешном выполнении - число символов типа TCHAR, скопированных в буфер, без учета нулевого символа - конца строки, иначе - 0.

Ресурсы создаются отдельно от файлов программы и добавляются в bin-файл при линковании программы. Подавляющее большинство ресурсов содержится в файлах ресурсов, имеющих расширение. RC. Имя файла ресурсов обычно совпадает с именем bin-файла программы. Так, если имя программы MYPROG. EXE, то имя файла ресурсов - MYPROG. RC.

При создании RC-файлов программист может столкнуться с одной тонкостью. Некоторые ресурсы, такие, как иконки, курсоры, диалоговые окна, изображения (bitmap'ы) могут быть сохранены в отдельных файлах с расширениями. ico,. cur,. dig,. bmp соответственно. В этом случае в RC-файлах делаются ссылки на упомянутые файлы.

Файл ресурсов создан - теперь его нужно откомпилировать. Компилируется он специальным компилятором ресурсов. Обычно имя компилятора ресурсов заканчивается на RC. EXE. В частности, в Borland 5.02 он называется BRC. EXE

После компиляции файла ресурсов компилятором ресурсов создается новый файл, имеющий расширение. RES. Именно этот RES-файл используется линкером для добавления ресурсов в bin-файл. Следует отметить, что при необходимости RES-файлы могут создаваться и редакторами ресурсов. В каком формате создавать ресурсы и как присоединять их к исполняемому файлу, зависит от потребностей и привычек создающего ресурсы программиста.

Таким образом, последовательность создания файла ресурса можно изобразить в виде табл.1.

Таблица 1

Последовательность создания файла ресурсов

№ п/п Действие Используемое средство
Создание RC-файла (при необходимости включающего ссылки на файлы с расширением. ico,. cur,. bmp, и т.д.) Редактор ресурсов (при необходимости может быть использован текстовый и графический редакторы)
Редактирование RC-файла в текстовом виде Текстовый редактор
Компиляция RC-файла - получение RES-файла Компилятор ресурсов
Добавление ресурсов, содержащихся в RES-файлс, в bin-файл Линкер

Меню приложения

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