Как обращаться с ресурсами GDI - PullRequest
0 голосов
/ 05 ноября 2010

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

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

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

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

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

1 Ответ

1 голос
/ 05 ноября 2010

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

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

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

...