2011-03-11 5 views
5

Estoy creando íconos en mi aplicación usando LoadIconWithScaleDown(). También recurro a CreateIconFromResourceEx() si la función preferida no está disponible.¿Debo llamar a DestroyIcon si lo hice con LoadIconWithScaleDown?

La documentación para DestroyIcon() estados:

Sólo es necesario llamar DestroyIcon para los iconos y cursores creados con las siguientes funciones: CreateIconFromResourceEx (si llama sin la bandera LR_SHARED), CreateIconIndirect, y CopyIcon. No use esta función para destruir un icono compartido . Un icono compartido es válido como siempre que el módulo desde el que estaba cargado permanezca en la memoria. Las siguientes funciones de obtienen un icono compartido.

  • LoadIcon
  • LoadImage (si se utiliza la bandera LR_SHARED)
  • CopyImage (si se utiliza la bandera LR_COPYRETURNORG y el parámetro Himage es un icono compartido)
  • CreateIconFromResource
  • CreateIconFromResourceEx (si se utiliza la bandera LR_SHARED)

Nota: No estoy pasando LR_SHARED a CreateIconFromResourceEx(); quizás debería.

Lo que me gustaría saber es, ¿tengo que llamar al DestroyIcon() para los iconos hechos con LoadIconWithScaleDown()?

+2

No documentado, doloroso. Tendría que votar Sí. Simplemente porque la función sería inutilizable de lo contrario. Hay posibilidades de que DestroyIcon devuelva FALSE cuando el icono se comparte realmente, así que no lo bombardees. –

+0

@Hans ¡Muchas gracias por su consejo! –

Respuesta

2

Yo diría que sí, dado que el HICON que está recibiendo no parece ser compartido según la documentación. Obviamente, Windows no quiere que destruyas íconos cuyos identificadores se comparten, pero ese no es el caso aquí, y si recurres a otra función que toma LR_SHARED pero no pasas el indicador, entonces eso significa que tu proceso posee el ícono. manejar y debes destruirlo cuando termines de usarlo.

+0

Gracias. Esto fue lo que mi intuición me dijo también. ¿Cuándo comparte Windows los iconos? ¿Y con quién o qué? –

+0

Los iconos que aparecen en los cuadros de mensaje (advertencia, error, exclamación, etc.), por ejemplo, se comparten. Puede obtener un identificador para esos y usarlos en lugares que no sean un cuadro de mensaje predeterminado. – kprobst

+0

y los iconos se pueden pasar a otros procesos? –

Cuestiones relacionadas