.Net - Rilevamento dell'impostazione dell'aspetto (Classic o XP?)
-
09-06-2019 - |
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.
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.