Enabling Visual Styles (Abilitazione degli stili di visualizzazione)

In questo argomento viene illustrato come configurare l'applicazione per assicurarsi che i controlli comuni vengano visualizzati nello stile di visualizzazione preferito dell'utente.

Questo argomento include le sezioni seguenti.

Uso di manifesti o direttive per assicurarsi che gli stili di visualizzazione possano essere applicati alle applicazioni

Per consentire all'applicazione di usare gli stili di visualizzazione, è necessario usare ComCtl32.dll versione 6 o successiva. Poiché la versione 6 non è ridistribuibile, è disponibile solo quando l'applicazione è in esecuzione in una versione di Windows che lo contiene. Windows viene fornito con entrambe le versioni 5 e 6. ComCtl32.dll versione 6 contiene sia i controlli utente che i controlli comuni. Per impostazione predefinita, le applicazioni usano i controlli utente definiti in User32.dll e i controlli comuni definiti in ComCtl32.dll versione 5. Per un elenco delle versioni dll e delle relative piattaforme di distribuzione, vedere Versioni di controllo comuni.

Se si vuole che l'applicazione usi gli stili di visualizzazione, è necessario aggiungere un manifesto dell'applicazione o una direttiva del compilatore che indica che ComCtl32.dll versione 6 deve essere usata se disponibile.

Un manifesto dell'applicazione consente a un'applicazione di specificare le versioni di un assembly necessarie. In Microsoft Win32 un assembly è un set di DLL e un elenco di oggetti controllabili che sono contenuti all'interno di tali DLL.

I manifesti vengono scritti in XML. Il nome del file manifesto dell'applicazione è il nome del file eseguibile seguito dall'estensione del file con estensione manifest; ad esempio MyApp.exe.manifest. Il manifesto di esempio seguente mostra che la prima sezione descrive il manifesto stesso. Nella tabella seguente vengono illustrati gli attributi impostati dall'elemento assemblyIdentity nella sezione relativa alla descrizione del manifesto.

Attributo Descrizione
Versione Versione del manifesto. La versione deve essere nel formato major.minor.revision.build , ovvero n.n.n.n.n, dove n <=65535.
processorArchitecture Processore per il quale viene sviluppata l'applicazione.
name Include il nome della società, il nome del prodotto e il nome dell'applicazione.
type Tipo di applicazione, ad esempio Win32.

 

Il manifesto di esempio fornisce anche una descrizione dell'applicazione e specifica le dipendenze dell'applicazione. Nella tabella seguente vengono illustrati gli attributi impostati dall'elemento assemblyIdentity nella sezione dependency.

Attributo Descrizione
type Tipo del componente di dipendenza, ad esempio Win32.
name Nome del componente.
Versione Versione del componente.
processorArchitecture Processore per il quale il componente è progettato.
Publickeytoken Token chiave usato con questo componente.
lingua Lingua del componente.

 

Di seguito è riportato un esempio di file manifesto.

Importante

Impostare la voce processorArchitecture su "X86" se l'applicazione è destinata alla piattaforma Windows a 32 bit o su "amd64" se l'applicazione è destinata alla piattaforma Windows a 64 bit. È anche possibile specificare "*", che garantisce che tutte le piattaforme siano destinate, come illustrato negli esempi seguenti.

 

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity
    version="1.0.0.0"
    processorArchitecture="*"
    name="CompanyName.ProductName.YourApplication"
    type="win32"
/>
<description>Your application description here.</description>
<dependency>
    <dependentAssembly>
        <assemblyIdentity
            type="win32"
            name="Microsoft.Windows.Common-Controls"
            version="6.0.0.0"
            processorArchitecture="*"
            publicKeyToken="6595b64144ccf1df"
            language="*"
        />
    </dependentAssembly>
</dependency>
</assembly>

Se si usa Microsoft Visual C++ 2005 o versione successiva, è possibile aggiungere la direttiva del compilatore seguente al codice sorgente anziché creare manualmente un manifesto. Per la leggibilità, la direttiva è suddivisa in diverse righe qui.

#pragma comment(linker,"\"/manifestdependency:type='win32' \
name='Microsoft.Windows.Common-Controls' version='6.0.0.0' \
processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"")

Negli argomenti seguenti vengono descritti i passaggi per l'applicazione di stili di visualizzazione a diversi tipi di applicazioni. Si noti che il formato del manifesto è lo stesso in ogni caso.

Uso di ComCtl32.dll versione 6 in un'applicazione che usa solo estensioni standard

Di seguito sono riportati esempi di applicazioni che non usano estensioni di terze parti.

  • Calcolatrice
  • FreeCell (in Windows Vista e Windows 7)
  • Minesweeper (in Windows Vista e Windows 7)
  • Blocco note
  • Solitario (in Windows Vista e Windows 7)

Per creare un manifesto e consentire all'applicazione di usare gli stili di visualizzazione.

  1. Collegarsi a ComCtl32.lib e chiamare InitCommonControls.

  2. Aggiungere un file denominato YourApp.exe.manifest all'albero di origine con formato manifesto XML.

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
    <assemblyIdentity
        version="1.0.0.0"
        processorArchitecture="*"
        name="CompanyName.ProductName.YourApplication"
        type="win32"
    />
    <description>Your application description here.</description>
    <dependency>
        <dependentAssembly>
            <assemblyIdentity
                type="win32"
                name="Microsoft.Windows.Common-Controls"
                version="6.0.0.0"
                processorArchitecture="*"
                publicKeyToken="6595b64144ccf1df"
                language="*"
            />
        </dependentAssembly>
    </dependency>
    </assembly>
    
  3. Aggiungere il manifesto al file di risorse dell'applicazione come segue:

    CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST "YourApp.exe.manifest"
    

    Nota

    Quando si aggiunge la voce precedente alla risorsa, è necessario formattarla su una riga. In alternativa, è possibile inserire il file manifesto XML nella stessa directory del file eseguibile dell'applicazione. Il sistema operativo caricherà prima il manifesto dal file system, quindi controlla la sezione della risorsa del file eseguibile. La versione del file system ha la precedenza.

     

Quando si compila l'applicazione, il manifesto verrà aggiunto come risorsa binaria.

Uso di ComCtl32 versione 6 in Pannello di controllo o di una DLL eseguita da RunDll32.exe

Per creare un manifesto e consentire all'applicazione di usare gli stili di visualizzazione.

  1. Collegarsi a ComCtl32.lib e chiamare InitCommonControls.

  2. Aggiungere un file denominato YourApp.cpl.manifest all'albero di origine con formato manifesto XML.

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
    <assemblyIdentity
        version="1.0.0.0"
        processorArchitecture="*"
        name="CompanyName.ProductName.YourApplication"
        type="win32"
    />
    <description>Your application description here.</description>
    <dependency>
        <dependentAssembly>
            <assemblyIdentity
                type="win32"
                name="Microsoft.Windows.Common-Controls"
                version="6.0.0.0"
                processorArchitecture="*"
                publicKeyToken="6595b64144ccf1df"
                language="*"
            />
        </dependentAssembly>
    </dependency>
    </assembly>
    
  3. Aggiungere il manifesto al file di risorse dell'applicazione come ID risorsa 123.

Nota

Quando si crea un'applicazione Pannello di controllo, inserirla nella categoria appropriata. Pannello di controllo ora supporta la categorizzazione delle applicazioni Pannello di controllo. Ciò significa che Pannello di controllo le applicazioni possono essere assegnati identificatori e separati in aree attività quali Aggiungi o Rimuovi programmi, Aspetto e Temi o Data, Ora, Lingua e Opzioni internazionali.

 

Aggiunta del supporto dello stile di visualizzazione a un'estensione, un plug-in, uno snap-in MMC o una DLL inserita in un processo

Il supporto per gli stili di visualizzazione può essere aggiunto a un'estensione, a un plug-in, a uno snap-in MMC o a una DLL inserita in un processo. Ad esempio, usare la procedura seguente per aggiungere il supporto degli stili di visualizzazione per uno snap-in di Microsoft Management Console (MMC).

  1. Compilare lo snap-in con il flag -DISOLATION_AWARE_ENABLED o inserire l'istruzione seguente prima dell'istruzione #include "windows.h".

    #define ISOLATION_AWARE_ENABLED 1
    

    Per altre informazioni sulle ISOLATION_AWARE_ENABLED, vedere Isolamento dei componenti.

  2. Includere il file di intestazione del controllo comune nell'origine snap-in.

    #include <commctrl.h>
    
  3. Aggiungere un file denominato YourApp.manifest all'albero di origine che usa il formato manifesto XML.

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
    <assemblyIdentity
        version="1.0.0.0"
        processorArchitecture="*"
        name="CompanyName.ProductName.YourApplication"
        type="win32"
    />
    <description>Your application description here.</description>
    <dependency>
        <dependentAssembly>
            <assemblyIdentity
                type="win32"
                name="Microsoft.Windows.Common-Controls"
                version="6.0.0.0"
                processorArchitecture="*"
                publicKeyToken="6595b64144ccf1df"
                language="*"
            />
        </dependentAssembly>
    </dependency>
    </assembly>
    
  4. Aggiungere il manifesto al file di risorse dello snap-in. Vedere Uso di ComCtl32 versione 6 in un'applicazione che usa estensioni, plug-in o una DLL inserita in un processo per informazioni dettagliate sull'aggiunta di un manifesto a un file di risorse.

Disattivazione degli stili di visualizzazione

È possibile disattivare gli stili di visualizzazione per un controllo o per tutti i controlli in una finestra chiamando la funzione SetWindowTheme come indicato di seguito:

SetWindowTheme(hwnd, L" ", L" ");

Nell'esempio precedente hwnd è l'handle della finestra in cui disabilitare gli stili di visualizzazione. Dopo la chiamata, il controllo esegue il rendering senza stili di visualizzazione.

Uso degli stili di visualizzazione con contenuto HTML

Le pagine HTML che modificano le proprietà CSS (Cascading Style Sheets), ad esempio lo sfondo o il bordo, non hanno stili di visualizzazione applicati. Visualizzano l'attributo CSS specificato. Se specificato come parte del contenuto, la maggior parte delle proprietà CSS si applica agli elementi con stili di visualizzazione applicati.

Per impostazione predefinita, gli stili di visualizzazione vengono applicati ai controlli HTML intrinseci nelle pagine visualizzate in Microsoft Internet Explorer 6 e versioni successive. Per disattivare gli stili di visualizzazione per una pagina HTML, aggiungere un tag META alla <head> sezione . Questa tecnica si applica anche al contenuto in pacchetto come applicazioni HTML (HTAs). Per disattivare gli stili di visualizzazione, il tag META deve essere il seguente:

<META HTTP-EQUIV="MSThemeCompatible" CONTENT="no">

Nota

Se l'impostazione del browser e l'impostazione del tag non sono d'accordo, la pagina non applicherà gli stili di visualizzazione. Ad esempio, se il tag META è impostato su "no" e il browser è impostato per abilitare gli stili di visualizzazione, gli stili di visualizzazione non verranno applicati alla pagina. Tuttavia, se il browser o il tag META è impostato su "sì" e l'altro elemento non viene specificato, verranno applicati gli stili di visualizzazione.

 

Gli stili di visualizzazione potrebbero modificare il layout del contenuto. Inoltre, se si impostano determinati attributi su controlli HTML intrinseci, ad esempio la larghezza di un pulsante, è possibile che l'etichetta sul pulsante sia illeggibile in determinati stili di visualizzazione.

È necessario testare accuratamente il contenuto usando gli stili di visualizzazione per determinare se l'applicazione degli stili di visualizzazione ha un effetto negativo sul contenuto e sul layout.

Quando gli stili di visualizzazione non vengono applicati

Per evitare di applicare stili di visualizzazione a una finestra di primo livello, assegnare alla finestra un'area non Null (SetWindowRgn). Il sistema presuppone che una finestra con un'area non NULL sia una finestra specializzata che non usa gli stili di visualizzazione. Una finestra figlio associata a una finestra di primo livello non degli stili di visualizzazione può comunque applicare stili di visualizzazione anche se la finestra padre non lo fa.

Se si desidera disabilitare l'uso degli stili di visualizzazione per tutte le finestre dell'applicazione, chiamare SetThemeAppProperties e non passare il flag STAP_ALLOW_NONCLIENT. Se un'applicazione non chiama SetThemeAppProperties, i valori del flag assunto sono STAP_ALLOW_NONCLIENT | STAP_ALLOW_CONTROLS | STAP_ALLOW_WEBCONTENT. I valori presunti determinano l'applicazione di uno stile di visualizzazione per l'area non client, i controlli e il contenuto Web.

Rendere l'applicazione compatibile con le versioni precedenti di Windows

Gran parte dell'architettura dello stile di visualizzazione è progettata per semplificare la distribuzione del prodotto nelle versioni precedenti di Windows che non supportano la modifica dell'aspetto dei controlli. Quando si esegue la spedizione di un'applicazione per più di un sistema operativo, tenere presente quanto segue:

  • Nelle versioni di Windows precedenti a Windows 8, gli stili di visualizzazione sono disattivati quando il contrasto elevato è attivo. Per supportare il contrasto elevato, un'applicazione legacy che supporta gli stili di visualizzazione deve fornire un percorso di codice separato per disegnare correttamente gli elementi dell'interfaccia utente in contrasto elevato. In Windows 8 il contrasto elevato fa parte degli stili di visualizzazione; Tuttavia, un'applicazione Windows 8 (una che include il GUID di Windows 8 nella sezione compatibilità del manifesto dell'applicazione) deve comunque fornire un percorso di codice separato per il rendering corretto in contrasto elevato in Windows 7 un precedente.
  • Se si usano le funzionalità di ComCtl32.dll versione 6, ad esempio la visualizzazione riquadro o il controllo collegamento, è necessario gestire il caso in cui tali controlli non siano disponibili nel computer dell'utente. ComCtl32.dll versione 6 non è ridistribuibile.
  • Testare l'applicazione per assicurarsi di non basarsi sulle funzionalità di ComCtl32.dll versione 6 senza prima verificare la versione corrente.
  • Non collegarsi a UxTheme.lib.
  • Scrivere codice di gestione degli errori per le istanze quando gli stili di visualizzazione non funzionano come previsto.
  • L'installazione del manifesto dell'applicazione nelle versioni precedenti non influirà sul rendering dei controlli.

Stili di visualizzazione