Realizzazione di una Finestra con le API Windows
Mer 03 Ott 2007
   





Introduzione

Esistono diverse librerie che forniscono delle funzioni di base per la costruzione di finestre in ambiente windows. È anche possibile costruire le finestre utilizzando direttamente le API di windows. In questo articolo si vedrà come costruire una semplice finestra utilizzando le API di windows.
Si considereranno vari esempi in ordine crescente di difficoltà, partendo dalla realizzazione di un message box fino ad arrivare alla realizzazione di una finestra completa di menù, toolbar e statusbar. Come compilatore si utilizzerà Microsoft Visual C++.  

Message Box

Per creare un semplice message box con visual c++ si deve creare una win32 application

Figura 1. Creazione Win32 Application.
Si seleziona l’opzione progetto vuoto

Figura 2. Progetto vuoto.
Quindi si crea un nuovo file C++

Figura 3. Creazione file C++.
e si scrive il seguente programma

mbox.c
  1. #include <windows.h>
  2.  
  3. int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
  4. LPSTR lpCmdLine, int nCmdShow)
  5. {
  6. MessageBox(NULL, "Prova di Message Box", "Message Box", MB_OK);
  7. return 0;
  8. }

Il message box risultante è il seguente

Figura 4. Message Box.
Ci sono diverse cose da notare. Innanzitutto nel programma non è presente la funzione main(), come in tutti i programmi C, ma la funzione WinMain. La funzione WinMain è la funzione principale, quella da cui comincerà l’esecuzione, così come la funzione main era la funzione principale, quella da cui cominciava l’esecuzione, nei normali programmi C.
L’esecuzione del programma consta quindi dell’esecuzione della funzione WinMain, poi all’interno della WinMain può esserci l’invocazione di una o più altre funzioni.
In questo caso l’esecuzione della WinMain prevede semplicemente la visualizzazione di un message box. Dopo la sua visualizzazione l’esecuzione della funzione WinMain termina (il programma termina) restituendo come codice di uscita 0.
La funzione WinMain

  1. #include <windows.h>
  2.  
  3. int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine,
  4. int nCmdShow)

ha quattro parametri
  • HINSTANCE hInstance. È l’handle dell’istanza della funzione WinMain. In ogni istante possono esistere diverse istanze della funzione WinMain, ciascuna relativa ad una diversa finestra. hInstance indica una di queste istanze (a quale di queste istanze si applicheranno le operazioni contenute nella WinMain);
  • HINSTANCE hPrevInstance. È l’handle dell’istanza della finestra genitrice, è sempre pari a NULL;
  • LPSTR lpCmdLine. È la linea di comando con cui viene lanciato il programma;
  • int nCmdShow. Indica come deve essere visualizzata la finestra dopo la sua creazione. I valori che può assumere sono i seguenti

    SW_HIDE Nasconde la finestra e ne attiva un'altra
    SW_MAXIMIZE Massimizza la finestra
    SW_MINIMIZE Minimizza la finestra
    SW_RESTORE Attiva e visualizza la finestra. Se la finestra era massimizzata o minimizzata viene ripristinata nella sua posizione originale con le dimensioni originali. Da usare per ripristinare una finestra minimizzata.
    SW_SHOW Attiva la finestra e la visualizza nella posizione corrente e con le dimensioni correnti
    SW_SHOWMAXIMIZED Attiva la finestra e la visualizza massimizzandola
    SW_SHOWMINIMIZED Attiva la finestra e la visualizza minimizzandola
    SW_SHOWMINNOACTIVE Visualizza la finestra minimizzandola. La finestra non viene attivata
    SW_SHOWNA Visualizza la finestra nella posizione corrente e con le dimensioni correnti. La finestra non viene attivata
    SW_SHOWNOACTIVATE Visualizza la finestra nella posizione e con le dimensioni più recenti. La finestra non viene attivata
    SW_SHOWNORMAL Attiva e visualizza la finestra. Se la finestra era massimizzata o minimizzata viene ripristinata nella sua posizione originale con le dimensioni originali. Da usare quando la finestra è visualizzata per la prima volta


Quindi per costruire una finestra in ambiente windows si crea la funzione WinMain che sarà il contenitore delle varie operazioni che porteranno alla costruzione e alla gestione della finestra.
Un programma che costruisce e gestisce un finestra sarà costituito da almeno due funzioni, la funzione WinMain e la funzione WndProc. Con la funzione WinMain si costruirà la finestra e ci si porrà in ascolto di tutti i messaggi e di tutti i comandi destinati alla finestra. La funzione WndProc si occuperà di processare i messaggi e i comandi destinati alla finestra.

Struttura di una Finestra


Figura 5. Struttura di una Finestra.
Pagina 1 di 5
Prec 1 2 3 4 5 Succ