Учебное пособие: Подклассы окон
LPVOID LockResource( hGlobResource );
и после доступа к данным разрешить его перемещение:
BOOL UnlockResource( hGlobResource );
(Это не отдельная процедура, а обычный GlobalUnlock). После использования ресурса его можно удалить с помощью процедуры:
BOOL FreeResource( hGlobResource );
Когда Вы применяете ресурсы какого-либо типа, предусмотренного Windows, то приходится применять несколько другие способы доступа к данным, связанные с необходимостью специальной обработки таких ресурсов. Можно выделить следующие основные типы ресурсов:
ACCELERATORS – таблица акселераторов клавиатуры; для загрузки применяется функция
HACCEL LoadAccelerators( hInstance, lpszAccName );
BITMAP – битмап, включенный в приложение для загрузки применяется функция
HBITMAP LoadBitmap( hInstance, lpszBitmapName );
CURSOR – ресурс, представляющий курсор мыши для загрузки применяется функция
HCURSOR LoadCursor( hInstance, lpszCursorName );
DIALOG – диалог с ресурсами типа DIALOG и с самими диалогами мы разберемся позже.
FONT – включение шрифтового ресурса о применении шрифтов мы говорили ранее. Включать ресурс этого типа в Ваше приложение следует специфическим способом, существенно отличающимся от остальных ресурсов.
ICON – иконка для загрузки применяется функция
HICON LoadIcon( hInstance, lpszIconName );
MENU – меню, которое может быть назначено к окну для загрузки применяется функция
HMENU LoadMenu( hInstance, lpszMenuName );
STRINGTABLE – таблица строк ресурс этого типа вообще не загружается целиком. Он представляет собой таблицу строк, имеющих идентификаторы, и обеспечивает доступ к конкретной строке по ее идентификатору. Реально ресурсу этого типа соответствует не блок данных в памяти, а, может быть, несколько - для каждых 16 строк (по порядку номеров) выделяется отдельный блок. Приложение может содержать только один ресурс этого типа, поэтому при описании таблицы строк в файле описания ресурсов ее имя не указывается - указывается только тип этого ресурса. Для доступа к строкам применяется функция
int LoadString( hInstance, idString, lpszBuff, nmaxCount );
Мы достаточно близко познакомились с ресурсами типа BITMAP и FONT; практически можно считать что мы знакомы и с ресурсами типа CURSOR и ICON, так как они описываются так‑же, как и BITMAP. Сейчас нам надо лучше разобраться с тремя новыми типами – ACCELERARTORS, MENU и DIALOG.
Акселераторы
Акселераторы представляют собой простейшее средство для связывания определенных комбинаций клавиш с конкретными действиями. Можно считать, что акселераторы представляют собой таблицу, в которой записываются нажимаемые клавиши и генерируемые ими сообщения.
Точнее, акселераторы генерируют только сообщение WM_COMMAND, указывая более подробную информацию в параметрах этого сообщения. Параметр wPar сообщения содержит идентификатор, назначенный клавише, а параметр lPar всегда равен 0x00010000L.
Для создания таблицы акселераторов Вы должны поместить в файле описания ресурсов соответствующий ресурс:
AccName ACCELERATORS [load-opt] [mem-opt]
BEGIN
key, id [, type] [, options]
...