Sistemi operativi, GUI e stili variPartendo dal vecchio Windows 3.1 e arrivando ad oggi notiamo come la grafica della GUI (Graphical User Interface), l'interfaccia grafica per intenderci, dei sistemi operativi Microsoft sia cambiata sensibilmente in meglio.
Ad ogni release nuova del sistema operativo, (spesso però è successo anche con la suite Office) Microsoft migliora la propria interfaccia con piccole aggiunte che rendono più "usabili" e intuitive le applicazioni come anche il desktop, la nostra scrivania da lavoro.
Così è successo quando è stata ridisegnata completamente l'interfaccia a finestre da Windows 3.1 a Windows 95, e ancora passando a Windows XP, poi sono state apportate piccole modifiche, come le icone alle voci dei menù in Office, la sfumatura a gradiente nella barra del titolo delle finestre, e così via.
Come detto Windows XP ha portato molte novità in campo grafico, ma noi sviluppatori come possiamo sfruttarle? Spesso non è facile e bisogna ricorrere a trucchetti vari di subclassing o simili. Vedremo però oggi che la cosa non nel nostro caso non è difficile.
Tre GUI a confronto (Windows 3.1, Windows 95, Windows XP)
Applicazioni Windows Forms e XP Style, perchè non funziona?Qualcuno di voi avrà già provato sicuramente a creare un'applicazione Win Forms con Visual Studio usando come sistema operativo Windows XP e avrà notato che durante l'esecuzione lo stile dei buttons (bottoni) delle textbox (caselle di testo) e di tutti i controlli in genere è quello classico, che vediamo da anni come mostrato qui sotto:
Un'applicazione .NET in esecuzione con stile classico
Quello che noi vogliamo ottenere invece è ben diverso:
Lo stile XP applicato alla Form
I controlli di WindowsEbbene, cominciamo quindi a vedere che cosa possiamo fare tramite Visual Studio .NET.
Iniziamo subito con il dire che gli oggetti/controlli derivati dalla classe
System.Windows.Forms.ButtonBase hanno rispetto a tutti gli altri controlli una proprietà in più che è:
FlatStyle che potete vedere nella finestra delle proprietà dentro Visual Studio.
I controlli derivati dalla classe madre sono
Button,
CheckBox e
RadioButton.
La proprietà
FlatStyle può assumere questi quattro valori:
- Flat (piano o flat)
- Popup (cambia stato durante il passaggio del mouse "mouse-hover")
- Standard
- System (assume le impostazioni del sistema operativo)
Per permettere al sistema di ridisegnare i controlli con la grafica di XP sarà necessario per questi tipi impostare la proprietà a
System.
E per gli altri controlli come si fa? Potrà obbiettare qualcuno.
Gli altri controlli non hanno chiaramente questa proprietà e necessitano di operazioni aggiuntive che ora mostreremo e automaticamente verranno trasformati.
La libreria comctl32.dll e la compatibilitàQuesta libreria è di fondamentale importanza perchè contiene il codice che implementa e disegna i vari controlli che vediamo solitamente (Common Controls) quindi ListView, Treeview, ecc.ecc. Per poter utilizzare la grafica di XP dovremo dire alla nostra applicazione tramite un file manifest di utilizzare l'ultima versione di questa libreria (la 6.0).
Se in passato questa libreria era redistribuibile (fino alla versione 5.0), e quindi i programmi che la sfruttavano giravano su quasi tutti i sistemi Windows, dalla versione 6.0 e da Windows XP non è più redistribuibile e quindi per godere della grafica di XP le applicazioni dovranno per forza girare su XP che per ora è l'unico ad avere la versione 6.0 (ed anche la 5.0 per compatibilità). Sugli altri sistemi verranno visualizzate nella modalità classica.
Aggiungere un file manifestPer poter raggiungere il nostro obbiettivo è sufficiente aggiungere un file manifest alla nostra applicazione.
Un file
Manifest è un file in XML che contiene meta-dati, cioè dati relativi alla nostra applicazione o più precisamente relativi ai tipi usati, alle dipendenze, alla sicurezza del nostro assembly. Il file manifest può essere inserito direttamente nel file .exe oppure può risiedere nella stessa cartelle dell'eseguibile.
Creiamo quindi con Visual Studio ma anche con il blocco note un file di testo e salviamolo con questa notazione:
nomeapplicazione.exe.manifest.
Il contenuto è il seguente: (sostituite <Nome Eseguibile>) con il nome senza estensione della vostra applicazione).
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity
version="1.0.0.0"
processorArchitecture="X86"
name="Microsoft.Winweb.<Nome Eseguibile>"
type="win32"
/>
<description>XP Buttons</description>
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
processorArchitecture="X86"
publicKeyToken="6595b64144ccf1df"
language="*"
/>
</dependentAssembly>
</dependency>
</assembly>
Se ora provate a spostare il file manifest nella cartella dell'eseguibile e a lanciarlo, come per magia i vostri controlli avranno lo stile di XP.
Chiaramente è un po' scomodo tirarsi dietro un file manifest. In questo caso possiamo inserirlo direttamente dentro l'eseguibile seguendo queste semplici istruzioni.
- Da Visual Studio .NET, menù File->Apri->File e selezionate il file eseguibile dell'applicazione
- Comparirà una Treeview con le risorse disponibili.
- Tasto destro su una voce qualsiasi, "Aggiungi Risorsa"
- Compare una maschera con i vari tipi di risorse
- Premere il pulsante "Importa" e cercare e selezionare il file .manifest che abbiamo creato
- Compare l'ennesima finestra, digitare "RT_MANIFEST" come tipo risorsa (senza virgolette)
- Il file Manifest viene aggiunto alle risorse
- Impostate come ID nella finestra delle proprietà 1, invece di 101
- Seleziona File->Salva tutti i file
- L'eseguibile ora contiene il file .manifest e sa di utilizzare la libreria comctl32.dll versione 6.0 per renderizzare i controlli
ConclusioniCome vedete, poche istruzioni per ottenere un risultato con degli effetti visuali molto accattivanti. Quando si fanno migrazioni di applicazioni bisogna anche ricordarsi di portare avanti anche il discorso visuale, per rendere più facili da usare e comprensibili le interfacce delle applicazioni.
Non a caso XP (da eXPerience) è un sistema nato per far vivere un'esperienza del tutto nuova all'utente. Microsoft cura molto questi aspetti, non a caso i suoi sistemi operativi sono usati dal 90% della popolazione. Un motivo ci sarà! :)