Home Page Home Page Articoli Windows XP Visual Styles con .NET e Win Forms

Windows XP Visual Styles con .NET e Win Forms

Come usare lo stile XP nelle vostre applicazioni .NET ? Questo articolo vi spiega come applicare a Buttons, Textbox, ListViews (ai controlli di Windows in genere) lo stile/tema grafico della GUI introdotto dal sistema operativo Windows XP.
Autore: David De Giacomi Livello:
Sistemi operativi, GUI e stili vari
Partendo 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)
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
Un'applicazione .NET in esecuzione con stile classico


Quello che noi vogliamo ottenere invece è ben diverso:

Lo stile XP applicato alla Form
Lo stile XP applicato alla Form


I controlli di Windows
Ebbene, 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 manifest
Per 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



Conclusioni
Come 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à! :)
Voto medio articolo: 3.8 Numero Voti: 46
David De Giacomi

David De Giacomi

MVP Program Logo Approda al mondo dell'informatica nell' Aprile del 1994. Un amico gli fa conoscere il Quick Basic del DOS. E' cosi che inizia la sua attività di sviluppatore. Prosegue il suo percorso con altri linguaggi (Visual Basic, Pascal, Java, ANSI C), fino ad arrivare a .NET. Per un certo periodo affianca all'attività ... Profilo completo

Articoli collegati

Importare dati di Excel con .NET tramite ODBC o OLEDB e Drag & Drop
Spesso in ambito aziendale è necessario adattare le proprie applicazioni e consentire che possano leggere e operare su file e dati provenienti dai tools della suite di Office fra cui uno dei più usati è Excel. Vediamo quindi come importare dati da file XLS tramite ODBC/OLEDB e Drag & Drop.
Autore: Marco Farina | Difficoltà:
Gestire le Access Control List (ACL) NTFS di file e directory con .NET
Scopriamo come nel .NET Framework 2.0 sia diventato facile recuperare e modificare la lista controllo accessi dei file e directory e in generale come gestire le ACL.
Autore: Marco Caruso | Difficoltà: | Commenti: 1 | Voto:
Costruire un client FTP usando il .NET Framework 2.0
In questo articolo tratteremo una delle novità più attese del .NET Framework 2.0, le classi per l'utilizzo del protocollo FTP. Realizzeremo un mini client FTP con alcune fra le funzionalità più comuni.
Autore: Giovanni Ferron | Difficoltà: | Commenti: 28
Alla scoperta di WMI, questo sconosciuto
WMI o Windows Management Instrumentation è un componente fondamentale del sistema operativo Windows. La sua utilità è permettere l'accesso a informazioni fondamentali del sistema, come informazioni sull'hardware, software, servizi, ecc. Vediamo come sfruttarlo con .NET.
Autore: Giovanni Ferron | Difficoltà: | Commenti: 2
Gestire e sfruttare i campi BLOB usando .NET
I database server sono software con una potenza elevata e offrono una vasta gamma di features che spesso non vengono utilizzate. Una di queste sono i campi BLOB (campi per contenere dati in formato binario). Vediamo in questo articolo come utilizzarli con .NET.
Autore: David De Giacomi | Difficoltà: | Commenti: 13
Catturare immagini da una Webcam con .NET
In questo articolo mostreremo come è possibile costruire una applicazione per catturare immagini da una Webcam, utilizzando componenti già presenti in Windows, in questo caso l' Avicap32.dll
Autore: Giovanni Ferron | Difficoltà: | Commenti: 22 | Voto:
Usare il protocollo POP3 per creare un Client di posta
Volete costruirvi un client di posta? Volete costruire una Web Mail ? Ecco un articolo che vi introduce al protocollo POP3 e vi insegna come costruire un mini client di posta elettronica.
Autore: Giovanni Ferron | Difficoltà: | Commenti: 2 | Voto:
La stampa di una Win Form
Vedremo in questo articolo i passi necessari per creare una stampa sia di testo che di grafica di una WinForm attraverso .NET.
Autore: Marco Caruso | Difficoltà: | Commenti: 9 | Voto:
Creare un Setup di un progetto con Visual Studio .NET
Ecco delle semplici ma dettagliate istruzioni passo-passo per costruire un pacchetto di Setup (Setup Package) per le nostre Applicazioni WinForms.
Autore: Marco Caruso | Difficoltà: | Commenti: 18
Creare un?icona nella Taskbar di Windows con .NET
Scoprirete come potenziare la vostra applicazione aggiungendo un'icona nella barra di Windows nella famosa Tray Area a fianco dell'orologio del sistema. Disponibile sia codice VB.NET che C#.
Autore: Giovanni Ferron | Difficoltà: | Commenti: 1 | Voto:
Costruire un Servizio di Windows usando .NET
Un avanzato tutorial che vi spiegherà passo passo e in modo dettagliato le istruzioni per costruire un Servizio Windows, utilizzando ciò che il .NET Framework ci mette a disposizione. Disponibile sia codice C# che VB.NET.
Autore: Giovanni Ferron | Difficoltà: | Commenti: 13 | Voto:
Come sfruttare le funzioni di una DLL unmanaged esterna creata in C/C++
Come usare la classe DllImportAttribute messa a disposizione dal namespace System.Runtime.InteropServices per sfruttare le funzioni di una DLL unmanaged Win32 old-style scritta con Visual C++ 6.0
Autore: David De Giacomi | Difficoltà: | Commenti: 4 | Voto:
Creare una DLL in Visual C++ 6.0
Vedremo in questo articolo come creare una Dynamic Link Link Library, comunemente chiamata DLL con Visual C++ 6.0. Questo passo è necessario per poi dimostrare l'utilizzo di librerie C/C++ in .NET tramite il package System.Runtime.InteropServices
Autore: David De Giacomi | Difficoltà: | Commenti: 11 | Voto:
Copyright © dotNetHell.it 2002-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5