2009-12-11 10 views
5

Estoy tratando de recuperar el color de fondo y el texto de la barra de tareas y/o la ventana principal de mis aplicaciones. Resultó que Windows 7 no devuelve los colores correctos. Si, por ejemplo, cambio a un tema de color rosa, Windows 7 aún se vuelve azul claro para el título de la ventana, aunque eso no es cierto. Esto sucede usando¿Hay una lista de combinaciones de parámetros válidos para GetThemeColor/Visual Styles API

GetSysColor(COLOR_ACTIVECAPTION); 

así como el uso HTHEME hTheme = OpenThemeData (hwnd, L "ventana");

HRESULT result = GetThemeColor(  
       hTheme, 
       WP_CAPTION, 
       CS_ACTIVE, 
       TMT_FILLCOLORHINT, 
       &color); 

Además, me encuentro probando varias combinaciones de parámetros para averiguar el color del texto de los subtítulos. Sé Microsofts páginas

Property Identifiers y Parts and States

pero la mayor combinación de estos cientos de parámetros no son válidos. ¿Hay alguna lista y/o descripción que combinaciones pueden ser usadas?

I.e.

GetThemeColor(  
        hTheme, 
        WP_CAPTION, // BP_PUSHBUTTON, 
        CS_ACTIVE, 
        TMT_CAPTIONTEXT, 
        &color); 

devuelve "Element not found".

Respuesta

8

De acuerdo con mi conocimiento de los temas XP, un archivo .msstyles es solo una colección de definiciones de partes que tienen imágenes y propiedades (colores, tamaños, fuentes, etc.), todas definidas arbitrariamente. La API UxTheme simplemente devuelve lo que está en este archivo, y la presencia de una determinada combinación de propiedades depende básicamente del autor del tema (por eso siempre debe recurrir a "clásico" GetSysColor, GetSystemMetrics o SystemParametersInfo si falla la API del tema para devolver lo que sea que esté buscando

Sin embargo, menciona un "tema rosa" aquí, así que supongo que está hablando de un tema Aero Glass. Los colores del tema Aero son manejados por el DWM y aún están separados del clásico o colores UxTheme API. Para recuperar el color de la ventana Aero, debe usar DwmGetColorizationColor, que lo devolverá en formato 0xAARRGGBB (en oposición a COLORREF que es 0x00BBGGRR, por lo que deberá traducir entre los dos formatos). para encontrar primero si está habilitada la composición DWM (también conocida como "Aero Glass") d, debe llamar al DwmIsCompositionEnabled.

+0

Información muy valiosa. Gracias. –

0

La forma más simple de entender esto es: El color de las barras de título SI ES de color azul claro.

Cuando se habilita la función aerodinámica, sin embargo, el texto de la barra de título se representa con un fondo totalmente transparente, y por lo tanto es (principalmente) cualquier color con el que DWM esté polarizando el marco.

0

Las constantes de propiedad (es decir, lo que las funciones de sombreado aceptan como parámetro iPartId) solo proporcionan un conjunto de las definiciones de tema (no obligatorio) para varias clases/partes/combinaciones de estilos.

I.e. su código debe estar listo para caer a un color determinado de otra manera.

A menudo es útil ver qué temas estándar definen XP (Luna) o Vista/7 (Aero). Para eso puedes usar algo de eso, p. ThemeExplorer: http://sourceforge.net/projects/mctrl/files/theme-explorer/

Cuestiones relacionadas