2010-11-05 9 views
0

Est-ce que quelqu'un connaît un bon document/article sur la gestion des ressources GDI? J'ai besoin de partager certaines ressources comme les icônes et les bitmaps entre les classes qui peuvent avoir une durée de vie différente, et je veux comprendre comment je devrais aborder ce problème.Comment gérer les ressources GDI

Pour les Mutex et autres objets du noyau, il existe une fonction DuplicateHandle, mais GDI me trouble un peu. En outre, la façon dont CBitmap renvoie HBITMAP via l'opérateur const HBITMAP, et ce genre, est un peu effrayant. Je voudrais éviter de créer des bitmaps locaux à chaque redessin, donc une certaine mise en cache des ressources serait bonne, mais aussi, je ne suis pas sûr de pouvoir commencer à créer et charger des ressources C##### alors que la pompe de message principale n'a pas J'ai commencé à courir.

Il semble que j'utilise de mauvais mots-clés, car je ne trouve pas de bonne documentation, mais une documentation maniable.

Répondre

1

Il n'y a pas une telle documentation, tout est assez simple. C'est à vous de décider quand appeler DeleteObject(). Et pour décider comment équilibrer l'utilisation des ressources de votre programme contre la création dynamique et la destruction de l'objet lorsque cela est nécessaire. Seules les bitmaps les plus importantes sont vraiment dignes d'être conservées. Les stylos et les pinceaux sont très bon marché, vous les créez et les détruisez à la volée. Les polices sont un cas de coin, souvent mis en cache simplement pour la vie du programme, car vous avez besoin d'un si petit nombre d'entre eux.

Il existe de nombreuses façons de gérer la mise en cache, un shared_ptr <> en C++ fournit par exemple le modèle de comptage de référence standard. Mais il est très courant de conserver la référence en tant que membre de votre classe wrapper de fenêtre. Il n'est pas très commun que le même bitmap soit utilisé dans plusieurs fenêtres. Ymmv.

La création d'objets GDI ne nécessite pas de boucle de message.

Questions connexes