giovedì 25 giugno 2009

Introduzione alle API Win32, Parte 3/6 - DevSpy.com

 

Articolo (versione 2) 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:

  1. Create un nuovo progetto come descritto in precedenza, cancellate il contenuto di main.c e successivamente cliccate su Progetto / nuova unità.
  2. Sarà creato un file Senza titolo 1. Createne un'altro, che sarà nominato Senza titolo 2. Rinominate sia il primo che il secondo file in resource.
  3. Salvate ora il primo file resource come resource.h ed il secondo come resource.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 e resource.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 file main.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 e END 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 a 0 (zero). Possiamo ancora rimandare il loro studio ad un prossimo approfondimento. Al parametro lpTemplateName (come sappiamo il tipo LPCTSTR equivale a const 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.




Introduzione alle API Win32, Parte 3/6 - DevSpy.com

Nessun commento:

Posta un commento