Prima di creare un progetto e quindi una finestra a livello di codice C/C++ dobbiamo spiegare la struttura base di un’applicazione Windows. Ogni finestra in Windows per essere univocamente riconoscibile presenta una valore che si chiama HANDLE, che è il valore di ritorno della funzione per creare le finestre CreateWindow. Un’applicazione Windows può essere suddivisa in due componenti principali: la funzione WinMain e la funzione per la gestione delle finestre. Microsoft Windows vuole che la funzione principale e di inizio di un’applicazione si chiami WinMain, così come main in applicazioni console. La funzione per la gestione delle finestre invece deve essere di tipo “call-back” che viene registrata e richiamata ogni qualvolta deve essere effettuata un’operazione su una finestra.
Vediamo ora alcuni tipi e strutture che occorre gestire per creare un’applicazione Windows.
- HANDLE – Un intero unsigned utilizzato come handle
- HWND – Un intero unsigned utilizzato come handle di una finestra
- LONG – Intero lungo
- LPSTR – Un puntatore a caratteri ( stringa )
- FARPROC – Puntatore ad una funzione
- WORD – Intero unsigned
- DWORD – Intero lungo unsigned
- MSG – Struttura per gestire i messaggi tra finestre
- PAINTSTRUCT – Struttura di disegno da utilizzare in una finestra
- RECT – Struttura per un rettangolo
- WNDCLASS – Struttura per una classe di finestre
La funzione WinMain()
Tutte le applicazioni Windows devono contenere una funzione WinMain che si occupa di:
- registrare le classi di finestre create dall’applicazione
- eseguire tutte le operazioni di inizializzazione
- creare ed avviare il ciclo di elaborazione dei messaggi dell’applicazione
- accedere alla coda dei messaggi dell’applicazione
- chiudere l’applicazione nel caso venga ricevuto il messaggio WM_QUIT
Ecco la definizione della funzione WinMain:
int PASCAL WinMain(HINSTANCE hInst, HISTANCE hPreInst, LPSTR lpszCmdLine, int nCmdShow)
La chiamata di una funzione PASCAL implica una maggiore efficenza nell’inserire i dati della funzione stessa nello stack, ma da Windows 95 in poi non ha avuto più nessun beneficio. Il valore di ritorno della funzione come si vede è un intero che poi sarà il numero di uscita dal processo principale. Il primo parametro hInst è di tipo HINSTANCE, cioè l’istanza dell’applicazione, mentre hPreInst di solito è nullo a meno che non esista un’istanza precedente. Vedremo cosa sia l’istanza di un’applicazione quando tratteremo di processi e thread. La stringa lpszCmdLine contiene i parametri passati all’applicazione dalla riga di comando, come del resto succedeva in main della console. L’ultimo argomento è nCmdShow che è il modo in cui deve essere mostrata la finestra, ad esempio SW_SHOWNORMAL per mostrarla normale o SW_SHOWMINNOACTIVE per mostrarla ridotta ad icona e non attiva.
Nella prossima lezione continueremo a parlare di programmazione visuale con la registrazione delle classi di finestra.
<< Lezione Precedente – Inizio Corso – Lezione Successiva >>