Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Este tópico explica como configurar seu aplicativo para garantir que os controles comuns sejam exibidos no estilo visual preferido do usuário.
Este tópico inclui as seguintes seções.
- Usando manifestos ou diretivas para garantir que os estilos visuais possam ser aplicados a aplicativos
- Usando ComCtl32.dll versão 6 em um aplicativo que usa apenas extensões padrão
- usando ComCtl32 versão 6 no Painel de Controle ou uma DLL que é executada por RunDll32.exe
- Adição de Suporte de Estilo Visual a uma Extensão, Plug-in, Snap-in do MMC ou uma DLL que é Integrada a um Processo
- Desativar estilos visuais
- Usando estilos visuais com conteúdo HTML
- Quando os estilos visuais não são aplicados
- Tornando seu aplicativo compatível com versões anteriores do Windows
- Tópicos relacionados
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 Common Control Versions.
Se você quiser que seu aplicativo use estilos visuais, você deve adicionar um manifesto do aplicativo ou diretiva de compilador que indica que ComCtl32.dll versão 6 deve ser usado se estiver disponível.
Um manifesto de aplicação permite a uma aplicação especificar quais versões de assembly 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 nome 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, onde n <=65535). |
| arquitetura do processador | Processador para o qual a sua aplicação é desenvolvida. |
| nome | Inclui o nome da empresa, o nome do produto e o nome do aplicativo. |
| tipo | Tipo de 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 dependency.
| Atributo | Descrição |
|---|---|
| tipo | Tipo do componente de dependência, como Win32. |
| nome | Nome do componente. |
| Versão | Versão do componente. |
| arquitetura do processador | Processador para o qual o componente foi projetado. |
| publicKeyToken | Token chave usado com este componente. |
| Idioma | Idioma do componente. |
A seguir está um exemplo de um arquivo de manifesto.
Importante
Defina a entrada processorArchitecture para "X86" se o seu aplicativo tiver como alvo a plataforma Windows de 32 bits, ou para "amd64" se o seu aplicativo tiver como alvo a plataforma Windows de 64 bits. Você também pode especificar "*", o que garante que todas as plataformas sejam alvo, como demonstrado 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 seu código-fonte em vez de criar manualmente um manifesto. Por uma questão de legibilidade, a diretiva divide-se aqui 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)
- Minesweeper (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.
Link para ComCtl32.lib e chame InitCommonControls.
Adicione um arquivo chamado .manifest YourApp.exeà sua á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>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 seu 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.
Link para ComCtl32.lib e chame InitCommonControls.
Adicione um arquivo chamado .manifest YourApp.cplà sua á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>Adicione o manifesto ao arquivo de recursos do seu 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 suporta a 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 tarefas, 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 é incorporada a um Processo
O suporte para estilos visuais pode ser adicionado a uma extensão, plug-in, snap-in do MMC ou uma DLL que é incorporada num processo. Por exemplo, use as etapas a seguir para adicionar suporte a estilos visuais para um snap-in do MMC (Console de Gerenciamento Microsoft).
Compile o seu snap-in com a flag -DISOLATION_AWARE_ENABLED ou insira a seguinte instrução antes da instrução #include "windows.h".
#define ISOLATION_AWARE_ENABLED 1Para obter mais informações sobre ISOLATION_AWARE_ENABLED, consulte Componentes de Isolamento.
Inclua o arquivo de cabeçalho de controle comum na origem do snap-in.
#include <commctrl.h>Adicione um arquivo chamado YourApp.manifest à sua árvore de código-fonte 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>Adicione o manifesto ao arquivo de recursos do snap-in. Consulte Usando ComCtl32 versão 6 numa aplicação que usa extensões, plug-ins ou uma DLL que é incorporada num 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 o SetWindowTheme função da seguinte maneira:
SetWindowTheme(hwnd, L" ", L" ");
No exemplo anterior, hwnd é o identificador da janela onde se devem desativar os 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 especificadas como parte do conteúdo, a maioria das propriedades CSS se aplica a elementos que têm estilos visuais aplicados.
Por padrão, 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 estilos visuais para uma página HTML, adicione uma marca META à seção <head>. Essa técnica também se aplica ao conteúdo empacotado como aplicativos HTML (HTAs). Para desativar estilos visuais, a tag 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 tag 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 tag META estiver definida como "sim" e o outro item não for especificado, estilos visuais serão aplicados.
Os estilos visuais podem alterar o layout do seu conteúdo. Além disso, se você definir certos 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 filha associada a uma janela de nível superior sem estilos visuais ainda pode aplicar estilos visuais, mesmo que a janela principal não o faça.
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 a continuação do envio do produto em versões anteriores do Windows que não suportam a 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 estã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 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 (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 um anterior.
- Se você usar os recursos do ComCtl32.dll versão 6, como o modo de exibição de bloco ou o controle de link, 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 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 a 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.
Tópicos relacionados