Struttura Base delle Applicazioni Windows

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 CorsoLezione Successiva >>

Informazioni su Giampaolo Rossi

Sviluppatore di software gestionale da oltre 28 anni.
Questa voce è stata pubblicata in VC/C++. Contrassegna il permalink.