Abbiamo già avuto modo di parlare di Metro e di programmazione per Windows 8. In questo articolo rivedremo brevemente alcuni esempi fatti nelle sessioni milanesi su Windows 8 Consumer Preview di Giorgio Sardo e cercheremo di prendere dimestichezza con la realizzazione di applicazioni Metro Style.
Gli strumenti
Per iniziare a lavorare possiamo installare una versione beta di Visual Studio 11 su Windows 7, oppure farla girare direttamente su una macchina virtuale equipaggiata con Windows 8 Consumer Preview.
C++ o C#... comunque WinRT
L'aspetto principale da sottolineare è che possiamo realizzare le nostre applicazioni utilizzando praticamente qualunque linguaggio di programmazione.
Come si vede in figura, alla base di una applicazione Metro Style (a differenza delle classiche applicazioni desktop) c'è il Windows Runtime, uno strato di API che ci permette di colloquiare in modo diretto con l'hardware della macchina (devices, media, comunicazione).
Proprio grazie al Windows Runtime possiamo creare applicazioni utilizzando le conoscenze che già abbiamo su:
- HTML/Javascript
- C#/XAML
- C++/XAML
Possiamo quindi ottenere risultati analoghi, quanto a performance e capacità, in C++ come in Javascript. Non ci rimane che sperimentare.
Un bottone in XAML e C++
Iniziamo lanciando Visual studio 11 e creando un nuovo progetto. Scegliamo una applicazione Visual C++ vuota:
L'interfaccia grafica è in XAML, possiamo inserire un bottone trascinandolo dalla toolbox:
Clicchiamo poi sul bottone e personalizziamo l'handler dell'evento click.
void Application1::BlankPage::Button_Click_1(Platform::Object^ senderm Windows::UI::Xaml::RoutedEventArgs^ e)
{
auto dlg = ref new Windows::UI:Popups::MessageDialog("Ciao C++");
dlg->ShowAsync();
}
Una volta lanciato il debugger parte il simulatore di METRO che ci mostra il bottone da premere (con il mouse o con il touchscreen). All'azione sul bottone apparirà una semplice finestra di dialogo con messaggio. Il tutto utilizzando C++ e con pochissimo codice.
Applicazione Metro Style C#
Vediamo ora come utilizzare gli stessi oggetti con C# ed ottenere un risultato analogo, sarà utile poi anche spendere due parole sul fatto che il codice che abbiamo prodotto, anche in C++, è asincrono.
Iniziamo con il riprodurre bottone e finestra di dialogo, creiamo una nuova applicazione vuota C#:
Trasciniamo dentro il bottone e vi clicchiamo due volte per scrivere il codice che gestisce il relativo click.
private void Button_Click_1(object sender, RoutedEventArgs e)
{
var dlg = new Windows.UI.Popups.MessageDialog("Ciao C#");
dlg.ShowAsync();
}
La prima cosa che notiamo è che abbiamo utilizzato gli stessi identici oggetti con entrambi i linguaggi, a conferma che WinRT è invocabile allo stesso modo da C# come da C++.
La seconda cosa da sottolineare è la presenza del suffisso 'Async', nel metodo invocato per mostrare la dialog.