Рис. 5.3. Образ меню в ОЗУ

Управление памятью в Windows организовано таким образом, что при нехватке ОЗУ операционная система может временно выгрузить участок памяти на диск и занять его другими данными либо переместить данные в другую область памяти. Таким образом, не исключена возможность того, что полученный указатель HG в какой-то момент будет указывать не на меню, а на другие данные. Чтобы запретить перемещение и выгрузку меню или другого ресурса, используется функция (char *)LockResource(HG).

Возвращаемый ею указатель совпадает с HG. При завершении работы с областью хранения меню память следует разблокировать при помощи функции GlobalUnlock(HG). Если загруженный в память ресурс больше не потребуется, то выделенная ему память освобождается вызовом FreeResource(HG). Впрочем, справочная система указывает, что FreeResource() является устаревшей функцией и ее не стоит применять.

При знакомстве с изложенным выше материалом мы видим, что функция HG = LoadResource() загружает меню и возвращает указатель HG, функция Средства модификации и построения меню

ИМепи = ЬоайМепиЧ) тоже загружает меню и возвращает дескриптор ИМепи. Но эти переменные получают разные значения. Переменная НЮ содержит адрес области памяти, в которую загружено меню, а hMen.ii - константу, значение которой позволяет системным программам найти меню в оперативной памяти и вывести в окно приложения. При этом, естественно, возникает желание получить и адрес, и дескриптор, связанные с одним меню. Предположим, что необходимо заменить название пункта другим текстом такого же размера, не пользуясь системной функцией МосИТуМепи(). Для решения подобных задач предусмотрена специальная функция получения дескриптора НМЕМи по известному указателю на шаблон меню вОЗУНМЕМи ЮайМепиШсИгегЛ (МЕМиТЕМРЬАТЕ *рМепи).

В листинге 5.19 приведен код, который позволяет отобразить меню, используя дескриптор гМегш, а потом изменять в памяти названия пунктов меню при помощи указателя рМепи.

Листинг 5.19

НкЖ Рбгс - FindResouгce(NULL.,,IDR_MENUl,,.


⇐ Предыдущая| |Следующая ⇒