2009-12-07 22 views

risposta

8

Non è possibile modificare il colore di una finestra singolarmente ma è possibile modificare il colore OS-wide tramite il resgistry. La voce dovrebbe essere qualcosa del tipo: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Control Panel\Glass Colorization\Swatches in congiunzione con HKEY_CURRENT_USER\Software\Microsoft\Windows\DWM - ColorizationColor

Dall'interno del codice è possibile solo regolare la forma e la dimensione del bordo del vetro ma non credo che il colore. In Windows Forms it is done like questo e in WPF like this.

+0

come si cambia il colore usando i tasti reg? hai qualche codice di esempio? : D su come implementarlo? : D – TheCardinal

2

Questo non è possibile con C# /. NET. WPF/WindowsForms ti permettono solo di cambiare i bordi degli elementi all'interno dell'applicazione. I confini delle applicazioni sono controllati dall'utente.

2

Mentre bitbonk e george hanno correttamente rilevato che le finestre non sono in grado di cambiare i colori dei bordi per le singole finestre, si potrebbe guardare in proprietario, disegnando la finestra. Potresti essere in grado di ottenere ciò di cui hai bisogno, tuttavia la finestra probabilmente non sarà più una finestra "nativa".

Vedere this question su SO.

2

TheCardinal: il metodo del Registro di sistema non modifica immediatamente il colore e richiede il riavvio del servizio di gestione finestre del desktop. C'è una funzione API Windows non documentata che ti permette di cambiare istantaneamente il colore del tema Aero. (Questa è ancora una volta, un cambiamento globale - si applica a tutte le finestre)

anche se non ho il codice C# per fare questo, VB.NET dovrebbe aiutare dal momento che sono essenzialmente la stessa cosa

<DllImport("dwmapi.dll", EntryPoint:="#127", PreserveSig:=False)> _ 
Public Shared Sub DwmGetColorizationParameters(ByRef parameters As WDM_COLORIZATION_PARAMS) 
End Sub 
//this above function GETS the color, and stores it in parameters. 
<DllImport("dwmapi.dll", EntryPoint:="#131", PreserveSig:=False)> _ 
Public Shared Sub DwmSetColorizationParameters(ByRef parameters As WDM_COLORIZATION_PARAMS, ByVal uUnknown As UInteger) 
End Sub 
//this above function SETS the color, and stores it in parameters. 

e infine il WDM_COLORIZATION_PARAMS struct è definita come tale (di nuovo in VB.NET, sorry)

Public Structure WDM_COLORIZATION_PARAMS 
    Public Color1 As Int32 
    Public Color2 As Int32 
    Public Intensity As Int32 
    Public Unknown1 As Int32 
    Public Unknown2 As Int32 
    Public Unknown3 As Int32 
    Public Opaque As Long 
End Structure 

logica del codice sarebbe il seguente:

WDM_COLORIZATION_PARAMS temp = getColor(); 
temp.Color1 = System.Drawing.Color.FromArgb(alpha,red,green,blue).ToArgb(); 
temp.Color2 = System.Drawing.Color.FromArgb(alpha,red,green,blue).ToArgb(); 
setColor(temp); 
+0

Benvenuti in StackOverflow! Puoi sempre convertire da C# a VB.NET o viceversa usando [Developer Fusion] (http://www.developerfusion.com/tools/convert/vb-to-csharp/) :) –

Problemi correlati