Funzione GetMessageA (winuser.h)
Recupera un messaggio dalla coda di messaggi del thread chiamante. La funzione invia messaggi inviati in arrivo fino a quando non è disponibile un messaggio inviato per il recupero.
A differenza di
BOOL GetMessageA(
[out] LPMSG lpMsg,
[in, optional] HWND hWnd,
[in] UINT wMsgFilterMin,
[in] UINT wMsgFilterMax
);
[out] lpMsg
Tipo: LPMSG
Puntatore a una struttura MSG che riceve informazioni sui messaggi dalla coda di messaggi del thread.
[in, optional] hWnd
Tipo: HWND
Handle per la finestra di cui recuperare i messaggi. La finestra deve appartenere al thread corrente.
Se
Se
[in] wMsgFilterMin
Tipo: UINT
Valore intero del valore del messaggio più basso da recuperare. Utilizzare WM_KEYFIRST (0x0100) per specificare il primo messaggio della tastiera o WM_MOUSEFIRST (0x0200) per specificare il primo messaggio del mouse.
Usare WM_INPUT qui e in wMsgFilterMax per specificare solo i messaggi WM_INPUT.
Se wMsgFilterMin e wMsgFilterMax sono entrambi zero, GetMessage restituisce tutti i messaggi disponibili, ovvero non viene eseguito alcun filtro di intervallo.
[in] wMsgFilterMax
Tipo: UINT
Valore intero del valore del messaggio più alto da recuperare. Utilizzare WM_KEYLAST per specificare l'ultimo messaggio della tastiera o WM_MOUSELAST per specificare l'ultimo messaggio del mouse.
Usare WM_INPUT qui e in wMsgFilterMin per specificare solo i messaggi WM_INPUT.
Se wMsgFilterMin e wMsgFilterMax sono entrambi zero, GetMessage restituisce tutti i messaggi disponibili, ovvero non viene eseguito alcun filtro di intervallo.
Tipo: bool
Se la funzione recupera un messaggio diverso da WM_QUIT, il valore restituito è diverso da zero.
Se la funzione recupera il messaggio WM_QUIT, il valore restituito è zero.
Se si verifica un errore, il valore restituito è -1. Ad esempio, la funzione ha esito negativo se hWnd è un handle di finestra non valido o lpMsg è un puntatore non valido. Per ottenere informazioni estese sull'errore, chiamare GetLastError.
Poiché il valore restituito può essere diverso da zero, zero o -1, evitare codice simile al seguente:
while (GetMessage( lpMsg, hWnd, 0, 0)) ...
La possibilità di un -1 valore restituito nel caso in cui hWnd sia un parametro non valido (ad esempio il riferimento a una finestra che è già stata eliminata definitivamente) significa che tale codice può causare errori irreversibili dell'applicazione. Usare invece codice simile al seguente:
BOOL bRet;
while( (bRet = GetMessage( &msg, hWnd, 0, 0 )) != 0)
{
if (bRet == -1)
{
// handle the error and possibly exit
}
else
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
Un'applicazione usa in genere il valore restituito per determinare se terminare il ciclo di messaggi principale e uscire dal programma.
La funzione
Si noti che GetMessage recupera sempre i messaggi WM_QUIT, indipendentemente dai valori specificati per wMsgFilterMin e wMsgFilterMax.
Durante questa chiamata, il sistema recapita messaggi in sospeso, non accodati, ovvero i messaggi inviati alle finestre di proprietà del thread chiamante usando la funzioneSendMessage
- Messaggi inviati
- Messaggi inviati
- Messaggi di input (hardware) ed eventi interni del sistema
- Messaggi inviati (di nuovo)
- WM_PAINT messaggi
- WM_TIMER messaggi
getMessage non rimuove i messaggi WM_PAINT dalla coda. I messaggi rimangono nella coda fino a quando non vengono elaborati.
Se una finestra di primo livello smette di rispondere ai messaggi per più di diversi secondi, il sistema considera che la finestra non risponde e la sostituisce con una finestra fantasma con gli stessi attributi di ordine z, posizione, dimensione e oggetto visivo. Ciò consente all'utente di spostarlo, ridimensionarlo o persino chiudere l'applicazione. Tuttavia, queste sono le uniche azioni disponibili perché l'applicazione in realtà non risponde. Quando si usa la modalità debugger, il sistema non genera una finestra fantasma.
Questa API non partecipa alla virtualizzazione DPI. L'output è in modalità della finestra di destinazione del messaggio. Il thread chiamante non viene preso in considerazione.Per un esempio, vedere Creazione di un ciclo di messaggi.
Nota
L'intestazione winuser.h definisce GetMessage come alias che seleziona automaticamente la versione ANSI o Unicode di questa funzione in base alla definizione della costante del preprocessore UNICODE. La combinazione dell'utilizzo dell'alias indipendente dalla codifica con il codice non indipendente dalla codifica può causare mancate corrispondenze che generano errori di compilazione o di runtime. Per altre informazioni, vedere convenzioni di per i prototipi di funzioni.
Requisito | Valore |
---|---|
client minimo supportato | Windows 2000 Professional [solo app desktop] |
server minimo supportato | Windows 2000 Server [solo app desktop] |
piattaforma di destinazione | Finestre |
intestazione |
winuser.h (include Windows.h) |
libreria |
User32.lib |
dll | User32.dll |
set di API | ext-ms-win-ntuser-message-l1-1-0 (introdotto in Windows 8) |
concettuale
riferimento