Compartilhar via


Habilitando estilos visuais

Este tópico explica como configurar seu aplicativo para garantir que controles comuns sejam exibidos no estilo visual preferencial 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 só está disponível quando seu aplicativo está em execução em uma versão do Windows que o contém. O Windows é fornecido com as versões 5 e 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 em 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 As Versões de Controle Comum.

Se quiser que seu aplicativo use estilos visuais, adicione um manifesto do aplicativo ou uma diretiva do compilador que indique que ComCtl32.dll versão 6 deve ser usado se ele estiver disponível.

Um manifesto do 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 que estão contidos nessas DLLs.

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

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

 

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

Atributo Descrição
tipo Tipo do componente de dependência, como Win32.
nome Nome do componente.
versão A versão do componente.
arquitetura do processador Processador para o qual o componente foi projetado.
publicKeyToken Token de chave usado com esse componente.
Idioma Idioma do componente.

 

Veja a seguir um exemplo de um arquivo de manifesto.

Importante

Defina a entrada processorArchitecture como "X86" se o aplicativo tiver como destino a plataforma Windows de 32 bits ou para "amd64" se o aplicativo for direcionado à plataforma Windows de 64 bits. Você também pode especificar "*", que garante que todas as plataformas sejam alvo, 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, poderá adicionar a seguinte diretiva do compilador ao código-fonte em vez de criar manualmente um manifesto. Para legibilidade, a diretiva é dividida em várias linhas aqui.

#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 somente extensões padrão

Veja a seguir exemplos de aplicativos que não usam extensões de terceiros.

  • Calculadora
  • FreeCell (no Windows Vista e no Windows 7)
  • Minesweeper (no Windows Vista e no Windows 7)
  • Bloco de notas
  • Paciência (No Windows Vista e No Windows 7)

Para criar um manifesto e habilitar seu aplicativo a usar 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 recurso 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ê compilar seu aplicativo, o manifesto será adicionado como um recurso binário.

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

Para criar um manifesto e habilitar seu aplicativo a usar 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 dá suporte à categorização de aplicativos do Painel de Controle. Isso significa que os aplicativos do Painel de Controle podem receber identificadores e separados em áreas de tarefa, como Adicionar ou Remover Programas, Aparência e Temas, ou Data, Hora, Idioma e Opções Regionais.

 

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

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

  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 recurso do snap-in. Consulte como usar o 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 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 é o identificador da janela na qual se deseja desabilitar estilos visuais. Após a chamada, o controle é renderizado sem estilos visuais.

Usando estilos visuais com conteúdo HTML

Páginas HTML que modificam as propriedades CSS (Folhas de Estilo 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 do 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 HTAs (Aplicativos HTML). 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 coincidirem, 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 definido como "sim" e o outro item não for especificado, os estilos visuais serão aplicados.

 

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 no seu conteúdo e layout.

Quando os estilos visuais não são aplicados

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

Se você quiser desabilitar o uso de estilos visuais para todas as janelas do aplicativo, chame SetThemeAppProperties e não passe o sinalizador STAP_ALLOW_NONCLIENT. Se um aplicativo não chamar SetThemeAppProperties, os valores de sinalizador presumidos serão STAP_ALLOW_NONCLIENT | STAP_ALLOW_CONTROLS | STAP_ALLOW_WEBCONTENT. Os valores presumidos fazem com que a área nãocliente, 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 tornar simples continuar a enviar seu produto em versões anteriores do Windows que não dão suporte à alteração da aparência dos controles. Ao enviar um aplicativo para mais de um sistema operacional, lembre-se do seguinte:

  • Em versões do Windows antes do Windows 8, os estilos visuais estão desativados quando o alto contraste está ativado. Para dar suporte a alto contraste, um aplicativo herdado que dá suporte a estilos visuais precisa fornecer um caminho de código separado para desenhar corretamente elementos de 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 (que inclui o GUID do Windows 8 na seção de compatibilidade do manifesto do aplicativo) ainda precisa fornecer um caminho de código separado para renderizar corretamente em alto contraste no Windows 7 anteriormente.
  • Se você usar os recursos na versão 6 do ComCtl32.dll, como a visão em bloco ou controle de links, deverá 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 verificar se você não está contando com recursos do ComCtl32.dll versão 6 sem antes verificar a versão atual.
  • Não vincule a UxTheme.lib.
  • Escreva o código de tratamento de erros para instâncias em que os estilos visuais não funcionam conforme o esperado.
  • Instalar o manifesto do aplicativo em versões anteriores não afetará a renderização dos controles.

estilos visuais