Ресурсы пользователя
Имеется возможность сохранить в виде ресурса и подключить к исполняемому модулю произвольные данные. Для этого в файле описания ресурсов должна быть ссылка на файл, содержащий подключаемые данные, например:
data1 MYDATA example1.dat
В качестве идентификатора и типа данных может быть указана произвольная строка. Загрузить такие данные можно при помощи вызова
hData := LoadResource (hInstance, FindResource(hInstance, 'data1', 'MYDATA') );
Для работы с самими данными необходим не хэндл, а указатель, что выглядит примерно так:
pData := LockResource(hData);
{действия с pData}
Вызов функции UnlockResource, использовавшейся в Windows 3.x, в Windows 95 не требуется. Когда ресурс больше не нужен, его следует освободить при помощи
FreeResource(hData);
Подробнее о функциях LoadResource, FindResource, LockResource и FreeResource см. в Справке по Win32 API.
Меню
Простейшим способом включения меню в интерфейс Windows-программы является описание его в файле ресурсов и последующая его загрузка оттуда. Существует также множество функций API, позволяющих создавать и изменять меню в процессе работы программы, однако большинство из них здесь рассматриваться не будут.
Меню, как и дочерние окна управления, при различных действиях пользователя посылает программе сообщения WM_COMMAND.
Меню бывают двух видов: главное меню (main menu), отображаемое в виде строки или нескольких строк вверху окна, подменю (drop-down menu), выглядящие как вертикальные списки строк и появляющиеся при выборе пунктов в главном меню, а также всплывающие меню (popup menu) появляющиеся (новый стандарт пользовательского интерфейса) при щелчке правой кнопкой мыши по тому или иному органу управления в окне.
Пункты меню могут быть "разрешены" (enabled), "запрещены" (disabled) или "недоступны" (grayed — серые). При выборе пользователем разрешенных пунктов меню происходят какие-то действия (открывается всплывающее меню или программе посылается сообщение WM_COMMAND). Запрещенные и недоступные пункты меню также можно выбрать, но никаких действий при этом не происходит. Запрещенные пункты меню, в отличие от недоступных, не отображаются серым цветом и выглядят так же, как разрешенные.
Кроме того, пункты всплывающего меню могут быть "помечены" (checked), при этом слева от соответствующего пункта меню отображается значок "галочки".
Описание меню в файле ресурсов производится согласно следующему шаблону:
<имя_меню> MENU
{
[<список элементов меню>]
}
<имя_меню> — это строка или число, служащее для идентификации меню в программе при описании класса окна. Список элементов меню состоит из описаний пунктов меню или всплывающих меню.
Пункт меню (которому не соответствует подменю) описывается как
MENUITEM "<текст>", <идентификатор> [, <признаки>]
Если пункту меню соответствует подменю, то оно описывается как
POPUP "<текст>" [, <признаки>]
{
[<список элементов меню>]
}
<Текст>, заключенный в кавычки — это строка, которая отображается в описываемом пункте меню. В текст может быть включен знак "&"; символ текста, следующий за амперсантом, будет отображаться подчеркнутым и при нажатии его на клавиатуре совместно с клавишей Alt будет выбираться этот пункт меню.
<идентификатор> — это число, передаваемое в программу в параметре сообщения WM_COMMAND при выборе этого пункта меню. Удобно использовать внешние определения идентификаторов, как это было описано выше при обсуждении строковых таблиц, и подключать их к описанию ресурсов директивой #include. Имена констант для идентификаторов меню принято начинать с символов "IDM_", например IDM_EDIT.
В качестве признаков элементов главного меню используются следующие флаги, которые можно объединять с помощью символа дизъюнкции ("ИЛИ") языка С ("|" — "трубопровод"):
GRAYED - пункт недоступен и выводится серым.
- Подключение файлов ресурсов к программе
- Ресурсы пользователя
- Inactive - пункт неактивен (не генерирует wm_command), но отображается обычным образом, несовместимо с grayed.
- Основные сообщения меню
- Использование таблицы акселераторов
- Окна диалога
- Библиотеки dll
- Синтаксис исходного текста dll
- Поиск используемых dll
- Подключение dll на этапе загрузки
- Подключение dll на этапе выполнения
- Использование ресурсов из dll
- Задание
- Варианты заданий: