Categories: VC/C++

Il Ciclo dei Messaggi nelle Finestre di Windows

Dopo aver visto come si registra una classe di finestre e le caratteristiche basilari delle strutture dell’SDK ( Software Development Kit ) di Windows, vediamo un altro aspetto molto importante e assai complicato per i principianti, il ciclo dei messaggi ed il suo funzionamento.
In Windows ogni azione dal mouse o tastiera non viene inviata direttamente all’applicazione, ma inserita nella coda dei messaggi, che possono essere intercettati con la funzione GetMessage. In pratica questa funzione ritorna il primo messaggio disponibile nella coda della propria applicazione:

BOOL GetMessage(LPMSG lpMsg, HWND hWnd, UINT uMsgInit, UINT uMsgEnd)

se viene trovato un messaggio diverso da WM_QUIT ( uscita dell’applicazione ) ritorna un valore diverso da zero, al contrario torna zero. LP davanti al tipo della variabile indica che si tratta di un puntatore al valore, lpMsg quindi è un puntatore ad una struttura MSG

typedef struct {
   HWND hWnd;
   UINT message;
   WPARAM wParam;
   LPARAM lParam;
   DWORD time;
   POINT pt;
} MSG, *PMSG;
  • hWnd – handle della finestra che riceve il messaggio
  • message – il messaggio o i messaggi uniti tramite OR bit a bit
  • wParam – il valore alto del messaggio
  • lParam – il valore basso del messaggio
  • time – l’ora di quando il messaggio è stato spedito
  • pt – POINT è una struttura formata da x ed y di tipo intero e rappresenta un punto con ascissa ed ordinata; questo valore è il punto del cursore in cui si trovava al momento della spedizione del messaggio

Il parametro hWnd della funzione GetMessage è l’handle della finestra che riceve i messaggi nel thread corrente, se è nullo vuol dire che vogliamo ricevere tutti i messaggi di tutte le finestre di un thread; uMsgInit e uMsgEnd sono il range dei messaggi da ricevere, il filtro in sostanza, se entrambi sono zero riceviamo tutti i messaggi. Quindi se dovessi prendere tutti i messaggi di tutte le finestre del thread ed uscire quando viene inviato il messaggio di chiusura applicazione ( WM_QUIT ) dovrò scrivere:

MSG msg;
while (GetMessage(&msg, 0, 0, 0))
{
   .. fai qualcosa ...
}

Dalla prossima lezione vedremo come costruire la nostra prima e semplice finestra con l’SDK di Windows.

<< Lezione Precedente – Inizio CorsoLezione Successiva >>

Share
Giampaolo Rossi

Sviluppatore di software gestionale da oltre 28 anni.

Recent Posts

Un Abbonamento per Tutti i Software

Sono arrivato alla convinzione che un abbonamento per tutti i miei software gestionali sia il…

1 anno ago

Software di Magazzino Gratuito

MerciGest è un software per la gestione del magazzino completamente gratuito. Continua a leggere→

1 anno ago

Mettere il PC in Lock Screen

In ufficio può capitare di doversi allontanare dal proprio posto di lavoro, ecco che allora…

3 anni ago

Fare il reset togliendo la corrente

In questo articolo vedremo quando è più o meno utile togliere la corrente ad un…

3 anni ago

Prossimi Aggiornamenti Software

Dopo la pausa invernale dovuta al lavoro che devo fare per sostentarmi, eccomi di nuovo…

3 anni ago

Come Eliminare i Files in Windows

Vediamo come eliminare i files direttamente da Windows senza utilizzare il cestino. Continua a leggere→

4 anni ago