windows winapi taskbar system-tray

¿Cómo le pregunto a Windows por el tamaño de los iconos de la bandeja del sistema?



winapi taskbar (3)

Crea tus iconos en múltiples formatos y deja que Windows seleccione el que quiere.

Aquí está el artículo de Wikipedia sobre el formato .ico.

Si realmente necesita saberlo, GetSystemMetrics con un parámetro de SM_CXICON o SM_CYICON le dirá el ancho y alto que Windows desea cargar.

Noté que mi aplicación envía iconos a la bandeja de Windows con un tamaño de 16x16 píxeles, y mi PC Vista tengo una barra de tareas doble que parece mostrar íconos a 18x18. Los artefactos de cambio de tamaño en el icono de mi aplicación se ven horribles. ¿Cómo puedo preguntar a Windows qué tamaño deberían tener los iconos?

editar:

Estoy generando el ícono dinámicamente, con una superposición de texto de fuente de píxeles. Parece un desperdicio generar dinámicamente un conjunto de tamaños de iconos, por lo que sería bueno evitar crear un ícono con todos los tamaños "posibles" (aunque no estoy seguro de cuáles son).

GetSystemMetrics (SM_CXSMICON) devuelve 16 - el valor incorrecto.

GetThemeBackgroundContentRect tampoco ayudó.


La respuesta principal de Mark es la correcta: crea tus íconos en múltiples formatos y deja que Windows elija el correcto. No olvides hacer iconos de 32x32 y 64x64 para escenarios HighDPI.

Pero SM_CXICON / SM_CYICON no devolverá necesariamente el tamaño que se utilizará en la barra de tareas. La barra de tareas elige el tamaño de icono correcto para su tamaño (esto es mucho más importante en la ventana 7).

Simplemente proporcione iconos del tamaño adecuado y debería estar bien.


Su mejor apuesta puede ser GetThemeBackgroundContentRect pasando TBN_BACKGROUND como iPartId para la bandeja de notificación de fondo.

GetThemeBackgroundContentRect debe devolver el tamaño definido por el tema actual que se puede usar para dibujar sin superponer los bordes del elemento principal. Si estoy leyendo esto correctamente, ese sería el icono de notificación de mayor tamaño permitido y, presumiblemente, el tamaño que se está utilizando.

Probando con múltiples configuraciones DPI es probablemente la forma más fácil de saber si esto está devolviendo el valor correcto.