2010-11-05 2 views
0

Кто-нибудь знает хороший документ/статью об обработке ресурсов GDI?Как обрабатывать ресурсы GDI

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

Для мьютексов и других объектов ядра есть функция DuplicateHandle, но GDI меня немного смущает. Кроме того, способ CBitmap возвращает HBITMAP через оператор const HBITMAP, и это похоже, немного страшно.

Я хотел бы избежать создания локальных растровых изображений на каждом перерисовке, поэтому некоторое кэширование ресурсов было бы хорошим, но также я не уверен, что могу начать создавать и загружать ресурсы C#####, в то время как основной насос сообщений hasn ' t запущен.

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

ответ

1

Нет такой документации, все это довольно просто. Вам решать, когда нужно называть DeleteObject(). И решить, как сбалансировать использование ресурсов вашей программы для динамического создания и уничтожения объекта, когда это необходимо. Достаточно большие растровые изображения действительно достойны. Ручки и кисти очень дешевы, вы создаете и уничтожаете их на лету. Шрифты - это угловой случай, который часто кэшируется просто для жизни программы, так как вам нужно так мало.

Существует множество способов управления кэшированием, shared_ptr <> в C++ предоставляет стандартный шаблон подсчета ссылок. Но очень просто сохранить ссылку в качестве члена вашего класса оболочки окна. Не совсем так, что одно и то же растровое изображение будет использоваться в нескольких окнах. YMMV.

Создание объектов GDI не требует цикла сообщений.

Смежные вопросы