Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
шпоры печатать.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
379.36 Кб
Скачать

Описатели в Win32.

При программировании для Windows всюду используются описатели. Описатель — это уникальный номер, идентифицирующий объекты различных типов: окон, управляющих элементов, меню, значков, кистей и перьев, блоков памяти, устройств вывода и даже экземпляров окон. Каждая копия программы, выполняемая под управлением Windows 95 или Windows NT, называется экземпляром.

Поскольку Windows 95 и Windows NT позволяют одновременно выполнять более одного экземпляра приложения, операционная система должна отслеживать все экземпляры. Для этого каждой работающей копии приложения присваивается описатель экземпляра.

Описатель экземпляра обычно представляет собой индекс в некоторой внутренней таблице. Обращаясь к элементу таблицы, а не к конкретному адресу, Windows 95 и Windows NT может динамически перераспределять ресурсы, просто вставляя новый адрес в таблицу. Windows 95 и NT экономят память за счет определенной методики обращения с несколькими копиями одного приложения. Многие же другие многозадачные среды рассматривают каждый следующий экземпляр как совершенно отдельное приложение.

Экземпляр приложения играет очень важную роль. Именно экземпляр приложения определяет объекты, необходимые для работы программы. Сюда могут входить меню, окна диалога, управляющие элементы и многое другое, а также новые классы окон.

109 Разработка приложений Win32. Менеджер палитр. Использование логической палитры.

Логическая палитра (logical palette) - это цветовая палитра, которую приложение создает и связывает с данным контекстом устройства. Логические палитры позволяют приложениям определять и использовать цвета, которые соответствуют их специфическим потребностям. Приложения могут создать любое число логических палитр, используя их для отдельных контекстов устройства, или переключая между ними для отдельные контексты устройства. Максимальное число палитр, которое приложение может создать, зависит от ресурсов системы.

Приложение создает логическую палитру при помощи использования функции CreatePalette. Приложение заполняет структуру LOGPALETTE, которая определяет число записей и кодов цвета для каждой записи, а затем приложение передает структуру в функцию CreatePalette. Возвращенное значение функцией - дескриптор палитры, который приложение использует во всех последующих операциях, чтобы идентифицировать палитру. Чтобы использовать цвета в логической палитре, приложение выбирает палитру в контекст устройства при помощи использования функции SelectPalette, а затем реализует палитру при помощи использования функции RealizePalette. Цвета в палитре становятся доступными, как только логическая палитра реализуется.

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

Как только логическая палитра будет создана, приложение может изменить цвета в палитре при помощи использования функции SetPaletteEntries. Если логическая палитра была выбрана и реализована, изменение палитры сразу же не влияет на цвета показанные на экране. Приложение должно использовать функции UnrealizeObject и RealizePalette, чтобы обновить цвета. В некоторых случаях, приложение, возможно, должно отменить выбор, отменить реализацию, выбрать и реализовывать логическую палитру, чтобы гарантировать, что цвета обновлены точно в соответствии с запросом. Если приложение выбирает логическую палитру в более чем один контекст устройства, изменения логической палитры, оказывают влияние все контексты устройства для которых она была выбрана.

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

Приложение может извлечь цвет и установить значения флажков для записей в данной логической палитре при помощи использования функция GetPaletteEntries. Приложение может извлечь индекс для записи в данной логической палитре, которая наиболее близко соответствует указанному коду цвета при помощи использования функции GetNearestPaletteIndex.

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