2017-09-01 7 views
0

J'ai une icône partagée HICON de l'extrait suivant.Devrions-nous supprimer hbmColor & hbmMask pour une icône partagée?

::SendMessageTimeout(hwnd, WM_GETICON, ICON_SMALL, 0, SMTO_ABORTIFHUNG, 500, &icon) 

Je récupéré son ICONINFO et recopié le hbmColor et hbmMask. Comme je remarque dans other snippets, les gens appellent alors ::DeleteObject() pour détruire hbmColor et hbmMask.

Est-ce également valable pour une icône partagée?

Comme mentionné dans MSDN, nous ne devrions pas appeler DestroyIcon sur une icône commune, qui sonne comme nous ne devrions pas appeler DestroyObject sur son icône commune hbmColor & hbmMask soit.

Il est seulement nécessaire d'appeler DestroyIcon pour les icônes et curseurs créés avec les fonctions suivantes: CreateIconFromResourceEx (si elle est appelée sans le drapeau LR_SHARED), CreateIconIndirect et CopyIcon.

+3

Il partage des icônes, il ne partage pas les structures ICONINFO. –

Répondre

2

La documentation GetIconInfo dit:

GetIconInfo crée bitmaps pour les hbmMask et hbmColor membres de ICONINFO. L'application appelante doit gérer ces bitmaps et les supprimer lorsqu'ils ne sont plus nécessaires.

Ceci est également vrai pour les icônes partagées. Vous devrez supprimer les bitmaps lorsque vous avez terminé avec eux.