Interfacce utente Interfaccia utente parte del sistema operativo che consente all’uomo di interagire con il computer Fondamenti di Informatica interfaccia utente è nata come interfaccia di tipo testuale (DOS e UNIX) 26. Windows Forms Corso di Laurea in Ingegneria Informatica e dell’Automazione A.A. 2012-2013 2° Semestre Prof. Giovanni Pascoschi Fondamenti di Informatica A.A. 2012-2013 Tipi di interfacce utente a cura di Pascoschi Giovanni 2 a cura di Pascoschi Giovanni 4 L’evoluzione delle interfacce utente (1) Interfaccia a caratteri DOS Due sono i tipi di interfaccia più diffusi per interagire con un computer: Interfacce a caratteri, anche dette a riga di comando (CLI, command line interfaces) Interfacce grafiche (GUI, graphical user interfaces), in particolare di tipo WIMP (Windows, Icons, Menus, Pointing device) Fondamenti di Informatica A.A. 2012-2013 a cura di Pascoschi Giovanni 3 Fondamenti di Informatica A.A. 2012-2013 Tipi di interfacce grafiche Tipi di interfacce grafiche Cosa distingue una interfaccia grafica dall’altra? La metafora più utilizzata nei personal computer, oggi, è quella della “scrivania” (in inglese, desktop) il tipo di metafora usata; gli elementi costitutivi che l’utente può manipolare. Dalla sua introduzione ad oggi sono state introdotte diverse interfacce alternative, ma nessuna ha avuto sinora successo Fondamenti di Informatica A.A. 2012-2013 a cura di Pascoschi Giovanni 5 L’evoluzione delle interfacce utente (2) a cura di Pascoschi Giovanni 6 a cura di Pascoschi Giovanni 8 L’evoluzione delle interfacce utente (3) Interfaccia grafica Windows 1.0 Interfaccia grafica Apple Fondamenti di Informatica A.A. 2012-2013 Fondamenti di Informatica A.A. 2012-2013 a cura di Pascoschi Giovanni 7 Fondamenti di Informatica A.A. 2012-2013 L’evoluzione delle interfacce utente (4) L’evoluzione delle interfacce utente (5) Interfaccia grafica Windows 3.0 Fondamenti di Informatica A.A. 2012-2013 Interfaccia grafica Windows 95 a cura di Pascoschi Giovanni 9 L’evoluzione delle interfacce utente (6) a cura di Pascoschi Giovanni 10 a cura di Pascoschi Giovanni 12 L’evoluzione delle interfacce utente (7) Interfaccia grafica SUN tridimensionale Fondamenti di Informatica A.A. 2012-2013 Fondamenti di Informatica A.A. 2012-2013 a cura di Pascoschi Giovanni Interfaccia grafica Windows VISTA 11 Fondamenti di Informatica A.A. 2012-2013 L’evoluzione delle interfacce utente (8) L’evoluzione delle interfacce utente (9) Interfaccia grafica Windows 8 Interfaccia grafica Windows 7 Fondamenti di Informatica A.A. 2012-2013 a cura di Pascoschi Giovanni 13 Programmazione delle interfacce grafiche Fondamenti di Informatica A.A. 2012-2013 a cura di Pascoschi Giovanni 14 Programmazione delle interfacce grafiche programmare una GUI (Graphical User Interface) è molto complesso Le interfacce attuali, basate sulla metafora della scrivania, sono di tipo WIMP (Windows, Icons, Menus, Pointing device) e’ necessaria molta programmazione a livello grafico Gli elementi che le compongono vengono detti widget sono necessari molti elementi grafici (pulsanti, menu’, icone, ecc) non è praticabile costruire un’applicazione partendo completamente da zero Una “widget” è un elemento che fornisce informazioni all’utente o gli permette di interagire con il sistema operativo o con un’applicazione. GUI e’ necessario usare una libreria GUI pre-esistente ogni piattaforma ha una propria libreria GUI Fondamenti di Informatica A.A. 2012-2013 a cura di Pascoschi Giovanni 15 Fondamenti di Informatica A.A. 2012-2013 a cura di Pascoschi Giovanni 16 Programmazione delle interfacce grafiche Esempio di widgets in Windows icona esempi di widget sono le icone, i menu, i pulsanti, le finestre, le barre di scorrimento, le caselle di testo, ecc barra degli strumenti icone di riduzione, ripristino e chiusura radiobox di solito è il sistema operativo a mettere a disposizione un insieme di widget. finestra pulsante Fondamenti di Informatica A.A. 2012-2013 a cura di Pascoschi Giovanni 17 Com’è fatta un’interfaccia grafica a cura di Pascoschi Giovanni 18 Le interfacce grafiche in C++ (1) • all’epoca di Windows 2.0 era necessario utilizzare una decina di istruzioni per creare una singola finestra grafica (vuota.....) • La finestra è anche un contenitore, ossia un elemento grafico che ne contiene degli altri • occorreva utilizzare un set di funzioni (API – Application Programming Interface) basate sul C • la barra del menu è un altro esempio di contenitore • la finestra puo’ contenere altri contenitori, come una matrioska o le scatole cinesi • gli elementi grafici piu’ complessi sono costituiti dall’unione di elementi grafici basilari a cura di Pascoschi Giovanni • furono poi introdotte le MFC - Microsoft Foundation Class che costituivano una libreria di 200 classi con un modello ad oggetti stile C++ per le API di Win32 (Windows 95) • l’ambiente .NET (introdotto con Windows Vista) ha creato la WPF - Windows Presentation Foundation accessibile interamente in .NET (anche Windows XP SP1 ha nativamente il framework .NET) • i vari elementi che sono presenti nel contenitore vengono chiamati componenti visuali Fondamenti di Informatica A.A. 2012-2013 Fondamenti di Informatica A.A. 2012-2013 19 Fondamenti di Informatica A.A. 2012-2013 a cura di Pascoschi Giovanni 20 Le interfacce grafiche in C++ (2) Le interfacce grafiche in C++ (3) • Windows Forms è una parte della libreria WPF che si occupa della gestione delle finestre • Tramite un’estensione del C++ (chiamato CLI/CLR) è possibile utilizzare il codice destinato all’ambiente .NET anche con VC++ • La differenza principale tra C++ e .NET è la gestione completamente automatica dell’allocazione e deallocazione della memoria impiegata per contenere le istanze degli oggetti • Il CRL mantiene un Heap separato da quello tradizionale chiamato Managed Heap differenza tra variabili managed e unmanaged • Tutti i controlli Windows Forms sono contenuti nel namespace System::Windows::Forms Fondamenti di Informatica A.A. 2012-2013 a cura di Pascoschi Giovanni 21 Le interfacce grafiche in C++ (4) Fondamenti di Informatica A.A. 2012-2013 a cura di Pascoschi Giovanni 22 Le interfacce grafiche in C++ (5) Esempio di crezione di una finestra dal titolo “finestra”: Form^ finestra = gcnew Form(); Per creare una etichetta di testo (label): Label^ etichetta = gcnew Label( ); etichetta->Text=“Testo di prova”; // gcnew è l’operatore di allocazione .NET // Form^ è il reference (come un puntatore) ad un oggetto di tipo managed una volta creato il componente visuale, bisogna inserirlo in un contenitore finestra->Controls->Add(etichetta); la finestra cosi’ creata ha una serie di attributi e metodi esempio : finestra->Text = “Prova”; finestra->Width = 300; //larghezza in pixel finestra->Height = 200; //altezza in pixel Fondamenti di Informatica A.A. 2012-2013 a cura di Pascoschi Giovanni 23 Fondamenti di Informatica A.A. 2012-2013 a cura di Pascoschi Giovanni 24 Le interfacce grafiche in C++ (6) Documentazione MSDN sulle Windows Form • per reperire maggiori informazioni sulle Windows Forms riferirsi alla http://msdn.microsoft.com/enMSDN Library us/library/dd30h2yb(VS.80).aspx • Un evento è una qualsiasi interazione dell’utente con l’interfaccia utente • per esempio “premere il pulsante OK” in una finestra, la “selezione di un radiobox”, ecc. • per gestire un qualsiasi evento bisogna utilizzare un “gestore di evento” (blocco di codice) che permette di catturare l’evento eseguendo la relativa azione. Fondamenti di Informatica A.A. 2012-2013 a cura di Pascoschi Giovanni 25 Esempi di progetti con Windows Form Fondamenti di Informatica A.A. 2012-2013 a cura di Pascoschi Giovanni 26 Somma di due numeri con Forms (1° step) Creazione progetto CLR (Common Resources Language) vuoto con nome somma_numeri 1. Programma di somma di due numeri (progetto somma_numeri) 2. Programma di somma di due numeri complessi (progetto primo_CLR) 3. Programma di immissione dati da memorizzare in un file (progetto azienda) Fondamenti di Informatica A.A. 2012-2013 a cura di Pascoschi Giovanni 27 Fondamenti di Informatica A.A. 2012-2013 a cura di Pascoschi Giovanni 28 Somma di due numeri con Forms (2° step) Aggiunta elemento UI Somma di due numeri con Forms (3° step) Windows Form con nome finestra1 Fondamenti di Informatica A.A. 2012-2013 a cura di Pascoschi Giovanni Creazione interfaccia grafica (utilizzando Casella degli Strumenti) 29 Somma di due numeri con Forms Fondamenti di Informatica A.A. 2012-2013 a cura di Pascoschi Giovanni 30 Somma di due numeri con Forms (3° & 4° step) 3° step creazione finestra (form) con gli oggetti grafici, utilizzando il menu degli strumenti sulla destra creazione di tre TextBox, tre Label e un button di comando 4° step agendo sulle proprietà associazione dei nomi (Name) alle Textform : PRIMO, SECONDO, SOMMA; associazione alle tre label dei testi (Text) : primo numero, secondo numero, somma; associazione al bottone di comando del testo (Text) : OK Fondamenti di Informatica A.A. 2012-2013 a cura di Pascoschi Giovanni 31 Fondamenti di Informatica A.A. 2012-2013 a cura di Pascoschi Giovanni 32 Somma di due numeri con Forms (5° step) Somma di due numeri con Forms (5° step) 5° step doppio click sul bottone di comando inserimento nel corpo del metodo button1_Click delle seguenti istruzioni: acquisisci_dati( ); // funzione per acquisire i dati PRIMO->Clear( ); // metodo per ripulire la Textform SECONDO->Clear( ); // metodo per ripulire la Textform e inserimento del prototipo della funzione nella sezione public: void acquisisci_dati( ); Fondamenti di Informatica A.A. 2012-2013 a cura di Pascoschi Giovanni 33 Somma di due numeri con Forms (6° step) 6° step Fondamenti di Informatica A.A. 2012-2013 a cura di Pascoschi Giovanni 34 a cura di Pascoschi Giovanni 36 Somma di due numeri con Forms (6° step) selezionare il file finestra1.cpp e aggiungere le seguenti istruzioni #include “finestra1.h" #include <iostream> using namespace std; using namespace System::Runtime::InteropServices; // per gestire le conversioni di formato void somma_numeri::finestra1::acquisisci_dati( ) { double num1, num2, tot; num1 = Convert::ToDouble(PRIMO->Text); // convertire da stringa “managed” a double num2 = Convert::ToDouble(SECONDO->Text); // conv. da stringa “managed” a double tot=num1+num2; SOMMA->Text=Convert::ToString(tot); // convertire da double a stringa “managed” } Fondamenti di Informatica A.A. 2012-2013 a cura di Pascoschi Giovanni 35 Fondamenti di Informatica A.A. 2012-2013 Somma di due numeri con Forms (7° step) Somma di due numeri con Forms (7° step) 7° step creare il file main.cpp e aggiungere le seguenti istruzioni #include <iostream> #include <string> #include “finestra1.h" using namespace std; int main( ){ somma_numeri::finestra1 Inizia; /*crea istanza Inizia della classe finestra1 del namespace somma_numeri*/ Inizia.ShowDialog(); // richiama il metodo ShowDialog } Fondamenti di Informatica A.A. 2012-2013 a cura di Pascoschi Giovanni 37 Somma di due numeri con Forms (output) Fondamenti di Informatica A.A. 2012-2013 a cura di Pascoschi Giovanni 38 Prodotto di due numeri complessi con Forms (step 1) nome progetto primo_CLR Creazione della finestra display cosi’ come qui evidenziato (reale1, immaginario1, reale2, immaginario2, reale3, immaginario3) Fondamenti di Informatica A.A. 2012-2013 a cura di Pascoschi Giovanni 39 Fondamenti di Informatica A.A. 2012-2013 a cura di Pascoschi Giovanni 40 Prodotto di due numeri complessi con Forms (step 2) Prodotto di due numeri complessi con Forms (step 3) file display.cpp gestione dell’evento click sul bottone OK Fondamenti di Informatica A.A. 2012-2013 a cura di Pascoschi Giovanni 41 Prodotto di due numeri complessi con Forms a cura di Pascoschi Giovanni 42 Prodotto di due numeri complessi con Forms alcuni metodi della classe complesso : complessi.cpp inclusione della dichiarazione della classe complesso : complessi1.h Fondamenti di Informatica A.A. 2012-2013 Fondamenti di Informatica A.A. 2012-2013 a cura di Pascoschi Giovanni 43 Fondamenti di Informatica A.A. 2012-2013 a cura di Pascoschi Giovanni 44 Prodotto di due numeri complessi con Forms (step 4) Prodotto di due numeri complessi con Forms (output) creazione main per partenza Form Fondamenti di Informatica A.A. 2012-2013 a cura di Pascoschi Giovanni 45 Fondamenti di Informatica A.A. 2012-2013 a cura di Pascoschi Giovanni 46 using namespace System::Runtime::InteropServices; Inserimento di dati da memorizzare in un file con Forms Inserimento di dati da memorizzare in un file con Forms (1° step) inserimento dipendenti in un archivio aziendale 1 Label, 4 Textbox + 1 radiobutton + 3 buttons (inserimento altro dipendente, annulla dati, fine programma) + Menu File con exit Fondamenti di Informatica A.A. 2012-2013 a cura di Pascoschi Giovanni 47 creazione Form di nome finestra1 (con textform, label e button) nomi textbox IDC_matricola, IDC_cognome, IDC_nome, IDC-stipendio Fondamenti di Informatica A.A. 2012-2013 a cura di Pascoschi Giovanni 48 Inserimento di dati da memorizzare in un file con Forms (2° step) Inserimento di dati da memorizzare in un file con Forms (3° step) creazione GroupBox drag nella Form tasto destro mouse “Porta in secondo piano” selezione radiobutton click nell’area del GroupBox proprietà radiobutton “impiegato” checked = true proprietà radiobutton “dirigente” Fondamenti di Informatica A.A. 2012-2013 a cura di Pascoschi Giovanni selezione Menustrip click nella finestra1 digitare File digitare nel submenu Esci 49 Inserimento di dati da memorizzare in un file con Forms (4° step) Fondamenti di Informatica A.A. 2012-2013 a cura di Pascoschi Giovanni 50 Inserimento di dati da memorizzare in un file con Forms (5° step) aggiungere un’altra Form di nome finestra2 inserire la label “Dati salvati correttamente” facendo doppio click su Altro dip. e Annulla aggiungere le seguenti istruzioni OK Annulla Fondamenti di Informatica A.A. 2012-2013 a cura di Pascoschi Giovanni 51 Fondamenti di Informatica A.A. 2012-2013 a cura di Pascoschi Giovanni 52 Inserimento di dati da memorizzare in un file con Forms (6° step) Inserimento di dati da memorizzare in un file con Forms (6° step) Nel file finestra1.cpp inserire le istruzioni riportate nelle due slide successive: occorre convertire le stringhe “managed” in stringhe “unmanaged” tramite il casting con la funzione di conversione StringToHGlobalAnsi IDC_impiegato->Checked controlla se è stato selezionato il radiobutton al termine viene richiamata l’istanza della Form finestra2 e viene eseguito il metodo ShowDialog Fondamenti di Informatica A.A. 2012-2013 a cura di Pascoschi Giovanni 53 Inserimento di dati da memorizzare in un file con Forms (6° step) #include <iostream> #include "finestra1.h" #include "finestra2.h" #include <fstream> using namespace std; using namespace System::Runtime::InteropServices; struct dip{ int matricola; char cognome[20]; char nome[20]; float stipendio; bool dirigente; }; struct dip dipendente; Fondamenti di Informatica A.A. 2012-2013 a cura di Pascoschi Giovanni 54 Inserimento di dati da memorizzare in un file con Forms (7° step) creazione main per partenza Form void azienda::finestra1::acquisisci_dati() { fstream fs; fs.open ("Archivio.dat", ios::in | ios:: out | ios:: binary); char* str1= (char*) (Marshal::StringToHGlobalAnsi(IDC_cognome->Text)).ToPointer(); char* str2= (char*) (Marshal::StringToHGlobalAnsi(IDC_nome->Text)).ToPointer(); dipendente.matricola = Convert::ToInt16(IDC_matricola->Text); strcpy(dipendente.cognome,str1); strcpy(dipendente.nome,str2); dipendente.stipendio=Convert::ToInt16(IDC_stipendio->Text); if(this->IDC_dirigente->Checked==true) dipendente.dirigente=true; if(this->IDC_impiegato->Checked==true) dipendente.dirigente=false; fs.write((char *)&dipendente, sizeof(dip)); fs.close(); finestra2 altra; altra.ShowDialog(); } Fondamenti di Informatica A.A. 2012-2013 a cura di Pascoschi Giovanni 55 Fondamenti di Informatica A.A. 2012-2013 a cura di Pascoschi Giovanni 56 Inserimento di dati da memorizzare in un file con Forms (8° step) facendo doppio click su Fine e Esci aggiungere le seguenti istruzioni Inserimento di dati da memorizzare in un file con Forms (output) Fine Esci Fondamenti di Informatica A.A. 2012-2013 a cura di Pascoschi Giovanni 57 Inserimento di dati da memorizzare in un file con Forms (output) Fondamenti di Informatica A.A. 2012-2013 a cura di Pascoschi Giovanni 58 a cura di Pascoschi Giovanni 60 Riepilogo della lezione Windows Forms Gestione delle GUI con C++ Windows Forms Fondamenti di Informatica A.A. 2012-2013 a cura di Pascoschi Giovanni 59 Fondamenti di Informatica A.A. 2012-2013 Fine della lezione Domande? Fondamenti di Informatica A.A. 2012-2013 a cura di Pascoschi Giovanni 61