Introduzione alle API Win32

Capitolo 6: controlli: gli STATIC

Nel file MIODIALOGO.RC usato al Capitolo 4 per preparare il nostro primo dialogo, avevamo descritto un dialogo vuoto, poichè nulla era elencato fra le righe di BEGIN e di END. Per rimediare a questo, basta inserire in questa zona delle righe che descrivano i controlli che il nostro dialogo deve contenere.

Un "controllo" è (normalmente) una finestra che è progettata appositamente per essere "figlia" di un'altra; di solito, specificamente, figlia di un dialogo. Il controllo ed il dialogo si scambiano messaggi, attraverso i quali comunicano; il controllo, inoltre, ha di solito, fra le proprie caratteristiche, quella di interagire con l'utente (sia "mostrandogli" qualcosa, sia, spesso, ricevendone l'input attraverso mouse e tastiera), e queste interazioni generano, alla fin fine, altri messaggi dal controllo verso il dialogo.

Avremo dunque, dopo le istruzioni RC che danno i vari dettagli del dialogo, qualcosa come:

BEGIN CONTROL "stringa", nId, classe, stile, x, y, larg, alt END dove nId è un arbitrario numero d'identificazione (dovremo poi usarlo, nel nostro codice, quando vorremo fare riferimento a questo controllo); classe può essere una delle parole-chiave seguenti: BUTTON, COMBOBOX, EDIT, LISTBOX, SCROLLBAR, STATIC (vi sono altre possibilità, ma per ora è decisamente meglio limitarci a queste!); stile è una combinazione di "codici di stile", come si è già visto per l'istruzione STYLE del dialogo (a ogni classe di controllo sono applicabili stili diversi); x e y sono le coordinate, entro il dialogo, dell'angolo in alto a sinistra del controllo; larg e alt, la larghezza e l'altezza del controllo (le unità di misura di queste grandezze geometriche sono sempre le dialog unit che abbiamo menzionato parlando del dialogo).

 

I controlli STATIC sono forse i più semplici, e fra i più usati. Uno STATIC può essere un campo di testo in solo output, o un semplice rettangolo che si staglia sul nostro dialogo, o può mostrare una immagine (bitmap), a seconda del suo "stile".

Gli usi più frequenti degli STATIC sono i testi. SS_LEFT, SS_CENTER, e SS_RIGHT, sono i tre tipici stili usati per mostrare del testo in sola uscita, testo che verrà, rispettivamente, allineato a sinistra, o centrato, o allineato a destra; esistono altri stili di testo, ma non occorre preoccuparsene. Il testo mostrato, naturalmente, è quello passato come primo argomento all'istruzione CONTROL.

Altro uso semplice, e tipico, di STATIC, è quello di mostrare, sul dialog, semplici rettangoli. I rettangoli "pieni" sono disegnati dagli STATIC con stile SS_BLACKRECT, SS_GRAYRECT, SS_WHITERECT; quelli col solo "perimetro", invece, usando lo stile SS_BLACKFRAME, SS_GRAYFRAME, SS_WHITEFRAME. Non fatevi ingannare dal significato letterale di BLACK ("nero", ecc); i GRAY usano il colore di sfondo dello schermo (grigio solo per default, ma l'utente può averlo cambiato come preferenza!), e similmente i BLACK usano il colore dei bordi delle finestre, i WHITE il colore degli sfondi delle finestre.

Per tutte le versioni di Win32 uscite negli ultimi anni, cioè Win/95, Win/NT 4.0, e successivi, si possono usare anche altri stili interessanti: SS_BITMAP, per avere uno static che mostra una bitmap, o anche SS_OWNERDRAW, per impegnarci a disegnarlo noi stessi; inoltre, ogni stile può essere combinato (col solito | alla C) con SS_SUNKEN, per dare al rettangolo dello STATIC l'aspetto "affossato" nel tipico look 3D; e con SS_NOTIFY, che dice al controllo di "avvertire" il dialogo, con opportuno messaggio, se l'utente fa clic del mouse sull'area del controllo stesso.

E dunque: modifichiamo solo il nostro file di risorse, non il nostro programma; nel file .RC, inseriamo fra BEGIN e END la singola riga (qui divisa in più righe, per comodità di formato; il resource compiler permette di dividere una sola riga logica in più righe fisiche):

CONTROL "Ciao!", 101, "STATIC", SS_CENTER|WS_BORDER, 60, 40, 40, 10

Lo stile WS_BORDER, applicabile a qualsiasi finestra, indica che vogliamo un "bordo" (cioè un contorno) per questa scritta.

Compilato questo .RC in un .RES, e fatto quanto occorra, col nostro RC e/o linker, per sostituire questo file di risorse a quello che avevamo già definito in precedenza entro il nostro EXE, possiamo fare nuovamente eseguire l'EXE stesso.

Mentre il nostro dialogo era, prima, vuoto (con lo stesso codice eseguibile), adesso ha, un po' a sinistra del centro, la scritta "Ciao!", con attorno un bordo rettangolare. È interessante ribadire che il nostro codice eseguile non è cambiato; è solo la situazione delle nostre risorse, quindi, che determina quale dialogo il nostro programma stia mostrando all'utente.

Questo dialogo, naturalmente, resta piuttosto "statico", per quanti "static" possiamo mettergli dentro, con scritte di vari stili. Perchè il nostro programma faccia qualcosa, sarà necessario che scriviamo del codice per rispondere agli eventi -- così come abbiamo dovuto gestire il messaggio WM_CLOSE per chiudere il dialogo (e quindi il programma) in risposta al "clic" dell'utente sulla crocetta in altro a destra del dialogo.

Proseguiremo, quindi, esaminando come le azioni dell'utente si traducono in messaggi alle finestre del programma, e alcune azioni che il programma può fare in risposta a questi eventi (messaggi).


Capitolo 5: messaggi
Capitolo 7: rispondere ai messaggi
Elenco dei capitoli