Condividi tramite


Funzione MessageBoxW (winuser.h)

Visualizza una finestra di dialogo modale contenente un'icona di sistema, un set di pulsanti e un breve messaggio specifico dell'applicazione, ad esempio informazioni sullo stato o sugli errori. La finestra di messaggio restituisce un valore intero che indica il pulsante su cui l'utente ha fatto clic.

Sintassi

int MessageBoxW(
  [in, optional] HWND    hWnd,
  [in, optional] LPCWSTR lpText,
  [in, optional] LPCWSTR lpCaption,
  [in]           UINT    uType
);

Parametri

[in, optional] hWnd

Tipo: HWND

Handle per la finestra proprietaria della finestra di messaggio da creare. Se questo parametro è NULL, la finestra di messaggio non ha una finestra di proprietario.

[in, optional] lpText

Tipo: LPCTSTR

Messaggio da visualizzare. Se la stringa è costituita da più righe, è possibile separare le righe utilizzando un ritorno a capo e/o un carattere di avanzamento riga tra ogni riga.

[in, optional] lpCaption

Tipo: LPCTSTR

Titolo della finestra di dialogo. Se questo parametro è NULL, il titolo predefinito è Error.

[in] uType

Tipo: UINT

Contenuto e comportamento della finestra di dialogo. Questo parametro può essere una combinazione di flag dai gruppi di flag seguenti.

Per indicare i pulsanti visualizzati nella finestra di messaggio, specificare uno dei valori seguenti.

Valore Significato
MB_ABORTRETRYIGNORE
0x00000002L
La finestra di messaggio contiene tre pulsanti di scelta: Interrompi, Riprovae Ignora.
MB_CANCELTRYCONTINUE
0x00000006L
La finestra di messaggio contiene tre pulsanti di scelta: Annulla, Riprova, Continua. Utilizzare questo tipo di messaggio anziché MB_ABORTRETRYIGNORE.
MB_HELP
0x00004000L
Aggiunge un pulsante della Guida alla finestra di messaggio. Quando l'utente fa clic sul pulsante della Guida o preme F1, il sistema invia un messaggio di WM_HELP al proprietario.
MB_OK
0x00000000L
La finestra di messaggio contiene un pulsante di pressione: OK. Si tratta dell'impostazione predefinita.
MB_OKCANCEL
0x00000001L
La finestra di messaggio contiene due pulsanti di scelta: OK e Annulla.
MB_RETRYCANCEL
0x00000005L
La finestra di messaggio contiene due pulsanti di scelta: di ripetizione dei tentativi e Annulla.
MB_YESNO
0x00000004L
La finestra di messaggio contiene due pulsanti di scelta: e No.
MB_YESNOCANCEL
0x00000003L
La finestra di messaggio contiene tre pulsanti di scelta: , Noe Annulla.
 

Per visualizzare un'icona nella finestra di messaggio, specificare uno dei valori seguenti.

Valore Significato
MB_ICONEXCLAMATION
0x00000030L
Nella finestra di messaggio viene visualizzata un'icona punto esclamativo.
MB_ICONWARNING
0x00000030L
Nella finestra di messaggio viene visualizzata un'icona punto esclamativo.
MB_ICONINFORMATION
0x00000040L
Un'icona costituita da una lettera minuscola i in un cerchio viene visualizzata nella finestra di messaggio.
MB_ICONASTERISK
0x00000040L
Un'icona costituita da una lettera minuscola i in un cerchio viene visualizzata nella finestra di messaggio.
MB_ICONQUESTION
0x00000020L
Nella finestra di messaggio viene visualizzata un'icona a forma di punto interrogativo. L'icona del messaggio punto interrogativo non è più consigliata perché non rappresenta chiaramente un tipo specifico di messaggio e perché la formulazione di un messaggio come domanda potrebbe essere applicata a qualsiasi tipo di messaggio. Inoltre, gli utenti possono confondere il punto interrogativo del simbolo del messaggio con le informazioni della Guida. Pertanto, non utilizzare questo simbolo di messaggio punto interrogativo nelle finestre di messaggio. Il sistema continua a supportare l'inclusione solo per la compatibilità con le versioni precedenti.
MB_ICONSTOP
0x00000010L
Nella finestra di messaggio viene visualizzata un'icona di segno di arresto.
MB_ICONERROR
0x00000010L
Nella finestra di messaggio viene visualizzata un'icona di segno di arresto.
MB_ICONHAND
0x00000010L
Nella finestra di messaggio viene visualizzata un'icona di segno di arresto.
 

Per indicare il pulsante predefinito, specificare uno dei valori seguenti.

Valore Significato
MB_DEFBUTTON1
0x00000000L
Il primo pulsante è il pulsante predefinito.

MB_DEFBUTTON1 è l'impostazione predefinita, a meno che non venga specificato MB_DEFBUTTON2, MB_DEFBUTTON3o MB_DEFBUTTON4.

MB_DEFBUTTON2
0x00000100L
Il secondo pulsante è il pulsante predefinito.
MB_DEFBUTTON3
0x00000200L
Il terzo pulsante è il pulsante predefinito.
MB_DEFBUTTON4
0x0000300L
Il quarto pulsante è il pulsante predefinito.
 

Per indicare la modalità della finestra di dialogo, specificare uno dei valori seguenti.

Valore Significato
MB_APPLMODAL
0x00000000L
L'utente deve rispondere alla finestra di messaggio prima di continuare a lavorare nella finestra identificata dal parametro hWnd . Tuttavia, l'utente può passare alle finestre di altri thread e lavorare in tali finestre.

A seconda della gerarchia di finestre nell'applicazione, l'utente può essere in grado di passare ad altre finestre all'interno del thread. Tutte le finestre figlio dell'elemento padre della finestra di messaggio vengono disabilitate automaticamente, ma le finestre popup non sono.

MB_APPLMODAL è l'impostazione predefinita se non viene specificato né MB_SYSTEMMODALMB_TASKMODAL.

MB_SYSTEMMODAL
0x00001000L
Uguale a MB_APPLMODAL ad eccezione del fatto che la finestra di messaggio ha lo stile WS_EX_TOPMOST. Usare finestre di messaggio modali di sistema per notificare all'utente errori gravi e potenzialmente dannosi che richiedono attenzione immediata, ad esempio l'esaurimento della memoria. Questo flag non ha alcun effetto sulla capacità dell'utente di interagire con finestre diverse da quelle associate a hWnd.
MB_TASKMODAL
0x00002000L
Uguale a MB_APPLMODAL ad eccezione del fatto che tutte le finestre di primo livello appartenenti al thread corrente vengono disabilitate se il parametro hWnd è NULL. Usare questo flag quando l'applicazione o la libreria chiamante non dispone di un handle di finestra disponibile, ma deve comunque impedire l'input ad altre finestre nel thread chiamante senza sospendere altri thread.
 

Per specificare altre opzioni, usare uno o più dei valori seguenti.

Valore Significato
MB_DEFAULT_DESKTOP_ONLY
0x00020000L
Uguale al desktop della stazione interattiva della finestra. Per altre informazioni, vedere Window Stations.

Se il desktop di input corrente non è il desktop predefinito, MessageBox non restituisce finché l'utente non passa al desktop predefinito.

MB_RIGHT
0x00080000L
Il testo è giustificato a destra.
MB_RTLREADING
0x00100000L
Visualizza il testo del messaggio e della didascalia usando l'ordine di lettura da destra a sinistra nei sistemi ebrei e arabi.
MB_SETFOREGROUND
0x00010000L
La finestra di messaggio diventa la finestra in primo piano. Internamente, il sistema chiama la funzione SetForegroundWindow per la finestra di messaggio.
MB_TOPMOST
0x00040000L
La finestra di messaggio viene creata con lo stile della finestra WS_EX_TOPMOST.
MB_SERVICE_NOTIFICATION
0x00200000L
Il chiamante è un servizio che invia una notifica all'utente di un evento. La funzione visualizza una finestra di messaggio sul desktop attivo corrente, anche se non è presente alcun utente connesso al computer.

Servizi terminal: Se il thread chiamante ha un token di rappresentazione, la funzione indirizza la finestra di messaggio alla sessione specificata nel token di rappresentazione.

Se questo flag è impostato, il parametro hWnd deve essere NULL. Ciò significa che la finestra di messaggio può essere visualizzata in un desktop diverso dal desktop corrispondente al hWnd.

Per informazioni sulle considerazioni sulla sicurezza relative all'uso di questo flag, vedere Interactive Services. In particolare, tenere presente che questo flag può produrre contenuto interattivo in un desktop bloccato e pertanto deve essere usato solo per un set molto limitato di scenari, ad esempio l'esaurimento delle risorse.

Valore restituito

Tipo: int

Se in una finestra di messaggio è presente un pulsante di Annulla , la funzione restituisce il valore IDCANCEL se viene premuto il tasto ESC o se è selezionato il pulsante annulla . Se la finestra di messaggio non ha pulsante Annulla, premere ESC non avrà alcun effetto, a meno che non sia presente un pulsante MB_OK. Se viene visualizzato un pulsante MB_OK e l'utente preme ESC, il valore restituito sarà IDOK.

Se la funzione ha esito negativo, il valore restituito è zero. Per ottenere informazioni estese sull'errore, chiamare GetLastError.

Se la funzione ha esito positivo, il valore restituito è uno dei valori delle voci di menu seguenti.

Codice/valore restituito Descrizione
IDABORT
3
È stato selezionato il pulsante interruzione .
IDCANCEL
2
È stato selezionato il pulsante Annulla .
IDCONTINUE
11
È stato selezionato il pulsante Continua .
IDIGNORE
5
È stato selezionato il pulsante Ignora .
IDNO
7
È stato selezionato il pulsante No (Nessuna ).
IDOK
1
È stato selezionato il pulsante OK .
IDRETRY
4
È stato selezionato il pulsante Riprova .
IDTRYAGAIN
10
È stato selezionato il pulsante Riprova .
IDYES
6
È stato selezionato pulsante Sì.

Osservazioni

Le icone di sistema seguenti possono essere usate in una finestra di messaggio impostando il parametro uType sul valore del flag corrispondente.

Icona Valori dei flag
icona per MB_ICONHAND, MB_ICONSTOP e MB_ICONERROR MB_ICONHAND, MB_ICONSTOPo MB_ICONERROR
Icona per MB_ICONQUESTION MB_ICONQUESTION
Icona per MB_ICONEXCLAMATION e MB_ICONWARNING MB_ICONEXCLAMATION o MB_ICONWARNING
Icona per MB_ICONASTERISK e MB_ICONINFORMATION MB_ICONASTERISK o MB_ICONINFORMATION
 

L'aggiunta di due segni da destra a sinistra (RLM), rappresentati dal carattere di formattazione Unicode U+200F, all'inizio di una stringa di visualizzazione MessageBox viene interpretata dal motore di rendering messageBox in modo da far sì che venga eseguito il rendering dell'ordine di lettura di MessageBox come da destra a sinistra (RTL).

Quando si usa una finestra di messaggio modale di sistema per indicare che la memoria del sistema è insufficiente, le stringhe a cui punta il lpText e parametri lpCaption non devono essere prese da un file di risorse perché un tentativo di caricamento della risorsa potrebbe non riuscire.

Se si crea una finestra di messaggio mentre è presente una finestra di dialogo, usare un handle per la finestra di dialogo come parametro hWnd. Il parametro hWnd non deve identificare una finestra figlio, ad esempio un controllo in una finestra di dialogo.

Esempi

Nell'esempio seguente l'applicazione visualizza una finestra di messaggio che richiede all'utente un'azione dopo che si è verificata una condizione di errore. Nella finestra di messaggio viene visualizzato il messaggio che descrive la condizione di errore e come risolverlo. Lo stile MB_CANCELTRYCONTINUE indirizza MessageBox per fornire tre pulsanti con cui l'utente può scegliere come procedere. Lo stile MB_DEFBUTTON2 imposta lo stato attivo predefinito sul secondo pulsante della finestra di messaggio, in questo caso il pulsante Riprova.

int DisplayResourceNAMessageBox()
{
    int msgboxID = MessageBox(
        NULL,
        (LPCWSTR)L"Resource not available\nDo you want to try again?",
        (LPCWSTR)L"Account Details",
        MB_ICONWARNING | MB_CANCELTRYCONTINUE | MB_DEFBUTTON2
    );

    switch (msgboxID)
    {
    case IDCANCEL:
        // TODO: add code
        break;
    case IDTRYAGAIN:
        // TODO: add code
        break;
    case IDCONTINUE:
        // TODO: add code
        break;
    }

    return msgboxID;
}

L'immagine seguente mostra l'output dell'esempio di codice precedente:

finestra di messaggio

Per un altro esempio di finestra di messaggio, vedere Visualizzazione di una finestra di messaggio.

Nota

L'intestazione winuser.h definisce MessageBox 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.

Fabbisogno

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-dialogbox-l1-1-0 (introdotto in Windows 8)

Vedere anche

concettuale

finestre di dialogo

FlashWindow

MessageBeep

MessageBoxEx

MessageBoxIndirect

altre risorse

riferimento

SetForegroundWindow