Pergunta

Eu tenho uma interface de usuário no VB 2005 que fica ótima no estilo XP, mas fica horrível no estilo clássico.

Alguma idéia sobre como detectar em qual modo o usuário está e reformatar os formulários rapidamente?


Edição de pós-resposta:

Obrigado Daniel, parece que isso vai funcionar.Estou usando a primeira solução que você postou com a função GetCurrentThemeName().

Estou fazendo o seguinte:

Declaração de função:

 Private Declare Unicode Function GetCurrentThemeName Lib "uxtheme" (ByVal stringThemeName As System.Text.StringBuilder, ByVal lengthThemeName As Integer, ByVal stringColorName As System.Text.StringBuilder, ByVal lengthColorName As Integer, ByVal stringSizeName As System.Text.StringBuilder, ByVal lengthSizeName As Integer) As Int32

Corpo do código:


Dim stringThemeName As New System.Text.StringBuilder(260)
Dim stringColorName As New System.Text.StringBuilder(260)
Dim stringSizeName As New System.Text.StringBuilder(260)

GetCurrentThemename (stringthemename, 260, stringcolorname, 260, stringsizename, 260) msgbox (stringthemename.toString)

A MessageBox aparece vazia quando estou no estilo/tema clássico do Windows e aparece com "C:\WINDOWS esources hemes\luna\luna.msstyles" se estiver no estilo/tema do Windows XP.Terei que verificar um pouco mais para ver o que acontece se o usuário definir outro tema além desses dois, mas não deve ser um grande problema.

Foi útil?

Solução

Tente usar uma combinação de Obter nome do tema atual (Página MSDN) e DwmIsCompositionEnabled

Vinculei o primeiro ao PInvoke para que você possa inseri-lo em seu código e, para o segundo, você pode usar o código fornecido no comentário do MSDN:

[DllImport("dwmapi.dll", PreserveSig = false)]
public static extern bool DwmIsCompositionEnabled();

Veja quais resultados você obtém com essas duas funções;eles devem ser suficientes para determinar quando você deseja usar um tema diferente!

Outras dicas

Pessoalmente, eu uso o seguinte para ver se o aplicativo está rodando sob o tema:

if (Application.RenderWithVisualStyles)
{
    // you're themed
}

Aí está o O tema está ativo Função WinAPI.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top