Habilitar estilos visuais

Este tópico explica como configurar seu aplicativo para garantir que controles comuns sejam exibidos no estilo visual preferido do usuário.

Este tópico inclui as seções a seguir.

Usando manifestos ou diretivas para garantir que estilos visuais possam ser aplicados a aplicativos

Para permitir que seu aplicativo use estilos visuais, você deve usar ComCtl32.dll versão 6 ou posterior. Como a versão 6 não é redistribuível, ela está disponível somente quando seu aplicativo está sendo executado em uma versão do Windows que o contém. O Windows é fornecido com a versão 5 e a versão 6. ComCtl32.dll versão 6 contém os controles de usuário e os controles comuns. Por padrão, os aplicativos usam os controles de usuário definidos no User32.dll e os controles comuns definidos no ComCtl32.dll versão 5. Para obter uma lista de versões de DLL e suas plataformas de distribuição, consulte Versões de controle comuns.

Se desejar que seu aplicativo use estilos visuais, você deverá adicionar um manifesto do aplicativo ou uma diretiva de compilador que indique que ComCtl32.dll versão 6 deve ser usada se estiver disponível.

Um manifesto de aplicativo permite que um aplicativo especifique quais versões de um assembly ele requer. No Microsoft Win32, um assembly é um conjunto de DLLs e uma lista de objetos versionáveis contidos nessas DLLs.

Os manifestos são gravados em XML. O nome do arquivo de manifesto do aplicativo é o nome do executável seguido pela extensão de nome de arquivo .manifest; por exemplo, MyApp.exe.manifest. O manifesto de exemplo a seguir mostra que a primeira seção descreve o próprio manifesto. A tabela a seguir mostra os atributos definidos pelo elemento assemblyIdentity na seção de descrição do manifesto.

Atributo Descrição
version Versão do manifesto. A versão deve estar no formato major.minor.revision.build (ou seja, n.n.n.n, onde n <=65535).
processorArchitecture Processador para o qual seu aplicativo é desenvolvido.
name Inclui nome da empresa, nome do produto e nome do aplicativo.
tipo Tipo do seu aplicativo, como Win32.

 

O manifesto de exemplo também fornece uma descrição do seu aplicativo e especifica as dependências do aplicativo. A tabela a seguir mostra os atributos definidos pelo elemento assemblyIdentity na seção dependência.

Atributo Descrição
tipo Tipo do componente de dependência, como Win32.
name Nome do componente.
version A versão do componente.
processorArchitecture Processador para o qual o componente foi projetado.
publicKeyToken Token de chave usado com este componente.
linguagem Idioma do componente.

 

A seguir está um exemplo de um arquivo de manifesto.

Importante

Defina a entrada processorArchitecture como "X86" se o aplicativo tiver como alvo a plataforma Windows de 32 bits ou "amd64" se o aplicativo tiver como alvo a plataforma Windows de 64 bits. Você também pode especificar "*", o que garante que todas as plataformas sejam direcionadas, conforme mostrado nos exemplos a seguir.

 

<?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 você estiver usando o Microsoft Visual C++ 2005 ou posterior, você pode adicionar a seguinte diretiva de compilador ao código-fonte em vez de criar manualmente um manifesto. Por razões de legibilidade, a directiva divide-se em várias linhas.

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

Os tópicos a seguir descrevem as etapas para aplicar estilos visuais a diferentes tipos de aplicativos. Observe que o formato do manifesto é o mesmo em cada caso.

Usando ComCtl32.dll versão 6 em um aplicativo que usa apenas extensões padrão

A seguir estão exemplos de aplicativos que não usam extensões de terceiros.

  • Calculadora
  • FreeCell (no Windows Vista e Windows 7)
  • Varredora de minas (no Windows Vista e Windows 7)
  • Bloco de notas
  • Solitaire (no Windows Vista e Windows 7)

Para criar um manifesto e permitir que seu aplicativo use estilos visuais.

  1. Link para ComCtl32.lib e chame InitCommonControls.

  2. Adicione um arquivo chamado YourApp.exe.manifest à árvore de origem que tenha o formato de 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. Adicione o manifesto ao arquivo de recursos do aplicativo da seguinte maneira:

    CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST "YourApp.exe.manifest"
    

    Observação

    Ao adicionar a entrada anterior ao recurso, você deve formatá-la em uma linha. Como alternativa, você pode colocar o arquivo de manifesto XML no mesmo diretório que o arquivo executável do aplicativo. O sistema operacional carregará o manifesto do sistema de arquivos primeiro e, em seguida, verificará a seção de recursos do executável. A versão do sistema de arquivos tem precedência.

     

Quando você cria seu aplicativo, o manifesto será adicionado como um recurso binário.

Usando ComCtl32 versão 6 no painel de controle ou uma DLL que é executada por RunDll32.exe

Para criar um manifesto e permitir que seu aplicativo use estilos visuais.

  1. Link para ComCtl32.lib e chame InitCommonControls.

  2. Adicione um arquivo chamado YourApp.cpl.manifest à árvore de origem que tenha o formato de 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. Adicione o manifesto ao arquivo de recurso do aplicativo como ID de recurso 123.

Observação

Ao criar um aplicativo do Painel de Controle, coloque-o na categoria apropriada. O Painel de Controle agora oferece suporte à categorização de aplicativos do Painel de Controle. Isso significa que os aplicativos do Painel de Controle podem receber identificadores e ser separados em áreas de tarefa, como Adicionar ou Remover Programas, Aparência e Temas ou Data, Hora, Idioma e Opções Regionais.

 

Adicionando suporte de estilo visual a uma extensão, plug-in, snap-in MMC ou uma DLL que é trazida para um processo

O suporte para estilos visuais pode ser adicionado a uma extensão, plug-in, snap-in do MMC ou uma DLL que é trazida para um processo. Por exemplo, use as etapas a seguir para adicionar suporte a estilos visuais para um snap-in do MMC (Console de Gerenciamento Microsoft).

  1. Compile seu snap-in com o sinalizador -DISOLATION_AWARE_ENABLED ou insira a instrução a seguir antes da instrução #include "windows.h".

    #define ISOLATION_AWARE_ENABLED 1
    

    Para obter mais informações sobre ISOLATION_AWARE_ENABLED, consulte Isolando componentes.

  2. Inclua o arquivo de cabeçalho de controle comum na origem do snap-in.

    #include <commctrl.h>
    
  3. Adicione um arquivo chamado YourApp.manifest à árvore de origem que usa o formato de 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. Adicione o manifesto ao arquivo de recursos do snap-in. Consulte Usando ComCtl32 versão 6 em um aplicativo que usa extensões, plug-ins ou uma DLL que é trazida para um processo para obter detalhes sobre como adicionar um manifesto a um arquivo de recurso.

Desativando estilos visuais

Você pode desativar os estilos visuais para um controle ou para todos os controles em uma janela chamando a função SetWindowTheme da seguinte maneira:

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

No exemplo anterior, hwnd é a alça da janela na qual desabilitar estilos visuais. Após a chamada, o controle é renderizado sem estilos visuais.

Usando estilos visuais com conteúdo HTML

As páginas HTML que modificam as propriedades CSS (Folhas de Estilos em Cascata), como plano de fundo ou borda, não têm estilos visuais aplicados a elas. Eles exibem o atributo CSS especificado. Quando especificado como parte do conteúdo, a maioria das propriedades CSS se aplica a elementos que têm estilos visuais aplicados.

Por padrão, os estilos visuais são aplicados a controles HTML intrínsecos em páginas exibidas no Microsoft Internet Explorer 6 e versões posteriores. Para desativar os estilos visuais de uma página HTML, adicione uma marca META à <head> seção. Essa técnica também se aplica ao conteúdo empacotado como aplicativos HTML (HTAs). Para desativar os estilos visuais, a marca META deve ser a seguinte:

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

Observação

Se a configuração do navegador e a configuração da tag não concordarem, a página não aplicará estilos visuais. Por exemplo, se a marca META estiver definida como "não" e o navegador estiver definido para habilitar estilos visuais, os estilos visuais não serão aplicados à página. No entanto, se o navegador ou a marca META estiver definida como "sim" e o outro item não for especificado, os estilos visuais serão aplicados.

 

Os estilos visuais podem alterar o layout do seu conteúdo. Além disso, se você definir determinados atributos em controles HTML intrínsecos, como a largura de um botão, poderá descobrir que o rótulo no botão é ilegível em determinados estilos visuais.

Você deve testar completamente seu conteúdo usando estilos visuais para determinar se a aplicação de estilos visuais tem um efeito adverso em seu conteúdo e layout.

Quando os estilos visuais não são aplicados

Para evitar a aplicação de estilos visuais a uma janela de nível superior, dê à janela uma região não nula (SetWindowRgn). O sistema assume que uma janela com uma região não-NULL é uma janela especializada que não usa estilos visuais. Uma janela filho associada a uma janela de nível superior de estilos não visuais ainda pode aplicar estilos visuais, mesmo que a janela pai não.

Se você quiser desabilitar o uso de estilos visuais para todas as janelas em seu aplicativo, chame SetThemeAppProperties e não passe o sinalizador STAP_ALLOW_NONCLIENT. Se um aplicativo não chamar SetThemeAppProperties, os valores de sinalizador assumidos serão STAP_ALLOW_NONCLIENT | STAP_ALLOW_CONTROLS | STAP_ALLOW_WEBCONTENT. Os valores assumidos fazem com que a área não cliente, os controles e o conteúdo da Web tenham um estilo visual aplicado.

Tornando seu aplicativo compatível com versões anteriores do Windows

Grande parte da arquitetura de estilo visual foi projetada para simplificar o envio do produto em versões anteriores do Windows que não oferecem suporte à alteração da aparência dos controles. Ao enviar um aplicativo para mais de um sistema operacional, esteja ciente do seguinte:

  • Em versões do Windows anteriores ao Windows 8, os estilos visuais são desativados quando o alto contraste está ativado. Para oferecer suporte a alto contraste, um aplicativo herdado que ofereça suporte a estilos visuais precisa fornecer um caminho de código separado para desenhar corretamente os elementos da interface do usuário em alto contraste. No Windows 8, o alto contraste faz parte dos estilos visuais; no entanto, um aplicativo do Windows 8 (um que inclui o GUID do Windows 8 na seção de compatibilidade de seu manifesto de aplicativo) ainda precisa fornecer um caminho de código separado para renderizar corretamente em alto contraste no Windows 7 um anterior.
  • Se você usar os recursos em ComCtl32.dll versão 6, como o modo de exibição de bloco ou controle de link, você deve lidar com o caso em que esses controles não estão disponíveis no computador do usuário. ComCtl32.dll versão 6 não é redistribuível.
  • Teste seu aplicativo para certificar-se de que você não está confiando em recursos do ComCtl32.dll versão 6 sem primeiro verificar a versão atual.
  • Não vincule ao UxTheme.lib.
  • Escreva código de tratamento de erros para instâncias em que os estilos visuais não funcionam conforme o esperado.
  • A instalação do manifesto do aplicativo em versões anteriores não afetará a renderização dos controles.

Estilos visuais