2009-12-11 3 views
5

Sto cercando di recuperare lo sfondo e il colore del testo della barra delle applicazioni e/o della finestra principale delle mie applicazioni. È risultato che Windows 7 non restituisce i colori corretti. Se si passa a un tema rosa, Windows 7 restituisce ancora l'azzurro per la didascalia della finestra, anche se questo non è vero. Questo accade utilizzandoEsiste un elenco di combinazioni di parametri valide per API GetThemeColor/Visual Styles

GetSysColor(COLOR_ACTIVECAPTION); 

nonché utilizzando HTHEME hTheme = OpenThemeData (hwnd, L "finestra");

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

Inoltre mi trovo a provare varie combinazioni di parametri per scoprire il colore del testo della didascalia. So Microsofts pagine

Property Identifiers e Parts and States

ma la maggior parte combinazione di questi centinaia di parametri non sono validi. C'è una lista e/o descrizione che combinazioni possono essere utilizzate?

I.e.

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

restituisce "Elemento non trovato".

risposta

8

In base alla mia conoscenza dei temi XP, un file .msstyles è solo una raccolta di definizioni di parti che hanno immagini e proprietà (colori, dimensioni, caratteri, ecc.), Tutte definite in modo arbitrario. L'API UxTheme restituisce semplicemente ciò che si trova in questo file e la presenza di una determinata combinazione di proprietà dipende fondamentalmente dall'autore del tema (che è il motivo per cui dovresti sempre tornare a "classico" GetSysColor, GetSystemMetrics o SystemParametersInfo se l'API del tema fallisce

Tuttavia, qui si parla di "tema rosa", quindi presumo che si stia parlando di un tema Aero Glass.I colori a tema Aero sono gestiti dal DWM e sono ancora separati dal classico o Colori API UxTheme. Per recuperare il colore della finestra Aero, è necessario utilizzare DwmGetColorizationColor, che verrà restituito nel formato 0xAARRGGBB (in contrasto con uno COLORREF che è 0x00BBGGRR, quindi sarà necessario tradurre tra i due formati). per prima cosa scoprire se la composizione DWM (alias "Aero Glass") è abilitata d, è necessario chiamare DwmIsCompositionEnabled.

+0

Informazioni molto preziose. Grazie. –

0

Il modo più semplice per capire questo è: il colore per le barre del titolo solido è ancora blu chiaro.

Quando aero è abilitato, tuttavia, il testo della barra del titolo viene renderizzato con uno sfondo completamente trasparente, e quindi è (principalmente) di qualsiasi colore con cui il DWM tinge il fotogramma.

0

Le costanti di proprietà (ovvero le funzioni di tema accettate come parametro iPartId) forniscono solo un insieme di definizioni di tema (non obbligatorio) per varie combinazioni di classi/parti/stili.

I.e. il tuo codice deve essere pronto per fallback a un colore determinato in altro modo.

Spesso è utile vedere quali sono i temi standard su XP (Luna) o Vista/7 (Aero) definiti. Per fare ciò, puoi usarne un po ', ad es. ThemeExplorer: http://sourceforge.net/projects/mctrl/files/theme-explorer/

Problemi correlati