Pregunta

Tengo una interfaz de usuario en VB 2005 que se ve muy bien en el estilo XP, pero es horrible en el estilo clásico.

¿Alguna idea sobre cómo detectar en qué modo se encuentra el usuario y volver a formatear los formularios sobre la marcha?


Publicar respuesta Editar:

Gracias Daniel, parece que esto funcionará.Estoy usando la primera solución que publicaste con la función GetCurrentThemeName().

Estoy haciendo lo siguiente:

Declaración de función:

 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

Cuerpo del 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)

El cuadro de mensaje aparece vacío cuando estoy en el estilo/tema clásico de Windows y aparece "C:\WINDOWS esources hemes\luna\luna.msstyles" si está en el estilo/tema de Windows XP.Tendré que verificar un poco más para ver qué sucede si el usuario configura otro tema además de estos dos, pero no debería ser un gran problema.

¿Fue útil?

Solución

Intente utilizar una combinación de Obtener nombre del tema actual (Página de MSDN) y DwmIsCompositionEnabled

Vinculé el primero a PInvoke para que puedas colocarlo en tu código, y para el segundo puedes usar el código proporcionado en el comentario de MSDN:

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

Vea qué resultados obtiene de esas dos funciones;¡Deberían ser suficientes para determinar cuándo deseas utilizar un tema diferente!

Otros consejos

Personalmente, uso lo siguiente para ver si la aplicación se ejecuta bajo el tema:

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

Ahí está el IsThemeActive Función WinAPI.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top