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:
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):
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