Domanda

Ho un'interfaccia utente in VB 2005 che sembra fantastica in stile XP, ma diventa orribile in stile classico.

Qualche idea su come rilevare in quale modalità si trova l'utente e riformattare i moduli al volo?


Modifica risposta post:

Grazie Daniel, sembra che funzionerà.Sto utilizzando la prima soluzione che hai pubblicato con la funzione GetCurrentThemeName().

Sto facendo quanto segue:

Dichiarazione di funzione:

 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 del codice:


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)

La finestra MessageBox appare vuota quando sono in stile/tema Windows Classico e viene visualizzata con "C:\WINDOWS esources hemes\luna\luna.msstyles" se è in stile/tema Windows XP.Dovrò fare qualche controllo in più per vedere cosa succede se l'utente imposta un tema diverso da questi due, ma non dovrebbe essere un grosso problema.

È stato utile?

Soluzione

Prova a utilizzare una combinazione di OttieniNomeTemaCorrente (Pagina MSDN) E DwmIsCompositionEnabled

Ho collegato il primo a PInvoke in modo che tu possa semplicemente inserirlo nel tuo codice, mentre per il secondo puoi utilizzare il codice fornito nel commento MSDN:

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

Guarda quali risultati ottieni da queste due funzioni;dovrebbero essere sufficienti per determinare quando desideri utilizzare un tema diverso!

Altri suggerimenti

Personalmente, utilizzo quanto segue per vedere se l'app è in esecuzione a tema:

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

C'è il È il tema attivo Funzione WinAPI.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top