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 applicationFigura 1. Creazione Win32 Application.
Figura 2. Progetto vuoto.
Figura 3. Creazione file C++.
mbox.c
#include <windows.h>
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow)
{
MessageBox(NULL, "Prova di Message Box", "Message Box", MB_OK);
return 0;
}
Il message box risultante è il seguente
Figura 4. Message Box.
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
ha quattro parametri
#include <windows.h>
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine,
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.