Introduzione alle API Win32, Parte 3/6
di Mastersgn, del 3 novembre 2006 C/C++
Cos'è un dialogo e come si configura tramite i file di risorsa. Creiamo un semplice dialogo modale con la funzione
DialogBoxParam()
, definendo alcuni elementi importanti che costituiranno la base per il prossimo articolo nel quale vedremo come inseririre un controllo nella finestra.Dialoghi e controlli
Nel precedente articolo abbiamo appreso come mostrare un semplice messaggio all'utente. Ora aumentiamo la complessità del nostro esempio illustrando come presentare il messaggio "Ciao a tutti" all'interno di un dialogo (Dialog).
Un dialogo è una finestra predefinita di Windows che può contenere al suo interno vari controlli quali bottoni, immagini, controlli di input e diversi altri in grado di interagire con l'utente.
Il nostro scopo è di creare un dialogo intitolato "Un messaggio" al cui interno porremo un controllo: un campo di testo per visualizzare la scritta "Ciao a tutti".
Procediamo
Per partire, abbiamo bisogno di due file. Vediamo come procurarceli:
- Create un nuovo progetto come descritto in precedenza, cancellate il contenuto di
main.c
e successivamente cliccate su Progetto / nuova unità.- Sarà creato un file
Senza titolo 1
. Createne un'altro, che sarà nominatoSenza titolo 2
. Rinominate sia il primo che il secondo file inresource
.- Salvate ora il primo file resource come
resource.h
ed il secondo comeresource.rc
, nella stessa cartella in cui avete salvato il progetto. Questi saranno i nostri file risorsa.Ci ritoveremo con 3 file:
main.c
,resource.h
eresource.rc
.A cosa servono i file di risorsa?
La creazione di un dialogo è gestita da un'apposita funzione che, in base ad una serie di parametri, determina le caratteristiche della finestra. Pensando a quanti attributi potremmo voler configurare in una finestra, è facile dedurre che sono potenzialmente troppi per essere passati tutti come parametri di funzione. Proprio a questo proposito, ci viene in aiuto il file risorsa appena creato.
Nel nostro file risorsa
resource.rc
potremo "descrivere" un dialogo, cioè definirne l'aspetto, il contenuto, gli stili... quindi tutte le caratteristiche del dialogo stesso.In effetti, vedremo come nel file risorsa
resource.rc
in qualche modo "disegneremo" il dialogo che poi verrà realmente creato attraverso una funzione nel codice del filemain.c
.Useremo, invece, il file
resource.h
per definire tutte le costanti del progetto. In questo modo, miglioreremo la leggibilità del codice.Il primo passo: configurare il file resource
E' arrivato il momento di "disegnare" il dialogo nel file
.rc
. Eseguiremo questa operazione attraverso un linguaggio specializzato - con una propria semantica e sintassi - nella descrizione di dialoghi e di altre risorse Windows.Copiate il seguente codice nel vostro file
resource.rc
:#include <windows.h>
MioDialogo DIALOG 20, 30, 180, 100
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Un dialogo"
FONT 8, "Ms Sans Serif"
BEGIN
END
Osservate come nel codice venga inclusa la libreria
windows.h
, ma che tuttavia non si tratta di linguaggio C.
Analizziamo ciascuna riga di codice:
MioDialogo DIALOG 20, 30, 180, 100
MioDialogo
è l'identificatore del dialogo, che come vedremo servirà indicare nella funzione di creazione. Per ora non ci soffermiamo su questo.
DIALOG
indica, naturalmente, che stiamo gestendo un dialogo. I restanti quattro numeri interi costituiscono, nell'ordine, la coppia di coordinate X-Y dove sarà posizionato il dialogo e la dimensione W-H del dialogo.
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
Questa riga indica una serie di stili da attribuire al dialogo. Approfondiremo prossimamente l'elenco degli stili utilizzabili.
CAPTION "Un dialogo"
CAPTION
specifica la stringa che verrà visualizzata nella barra del titolo di questo dialogo.
FONT 8, "Ms Sans Serif"
FONT
imposta il carattere del testo utilizzato nel dialogo.
BEGIN
END
Tra
BEGIN
eEND
dovremo posizionare i controlli del dialogo. Il nostro primo dialogo rimarà vuoto, per cui questa porzione di codice rimane priva di istruzioni.
Il secondo passo: eseguire la funzione
Nel file
main.c
trascrivete il seguente codice:
#include <windows.h>
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
DialogBoxParam(0, "MioDialogo", 0, 0, 0);
return 0;
}
Si tratta di codice che già conosciamo, tranne che per la nuova funzione
DialogBoxParam
che crea il dialogo. Analizziamo la sua definizione:
INT DialogBoxParam(
HINSTANCE hInstance,
LPCTSTR lpTemplateName,
HWND hWndParent,
DLGPROC lpDialogFunc,
LPARAM dwInitParam
);
Passeremo i parametri
hInstance
,hWndParent
,lpDialogFunc
,dwInitParam
tutti a0
(zero). Possiamo ancora rimandare il loro studio ad un prossimo approfondimento. Al parametrolpTemplateName
(come sappiamo il tipo LPCTSTR equivale aconst char*
) passeremo l'identificatore del dialogo:MioDialogo
in questo caso.
Dato che non abbiamo utilizzato valori costanti, il file
resource.h
è rimasto ancora vuoto.
Avvio dell'applicazione
Compilate il codice e lanciate il programma: comparirà un dialogo vuoto.
Attenzione
Una volta avviato il programma, non sarà possibile chiudere il dialogo normalmente. Dovrete usare il Task Manager:
- premete i tasti [Ctrl] + [Alt] + [Canc];
- selezionate la linguetta Processi;
- trovate il nome del vostro file eseguibile nell'elenco dei processi attivi (colonna Nome immagine) e selezionatelo;
- premete il tasto [Termina processo] per chiudere la finestra.
Nel prossimo articolo daremo una spiegazione per la "non-chiusura" del dialogo e vedremo come inserire il primo controllo.
Nessun commento:
Posta un commento