Domanda

Ho il seguente codice C ++ non gestito:

MessageBox( NULL, strMessage, "Cool Product", MB_RETRYCANCEL | MB_ICONEXCLAMATION);

Voglio disabilitare il pulsante RETRY per 10 secondi (ad esempio), quindi abilitarlo.

Come posso farlo?

È stato utile?

Soluzione

Come @ffpf dice, devi fare la tua finestra di dialogo per farlo, usando MFC, ATL, raw Win32, ecc.

Quindi crea un timer che abiliti e disabiliti il ??pulsante.

Altri suggerimenti

Non puoi manipolare direttamente i controlli MessageBox, ma puoi usare un hack. Installa un hook CB _ WH appena prima di visualizzare la finestra di dialogo e gestisci l'evento ACTIVATE _ HCBT. Questo ti darà l'HWND della finestra di messaggio, in modo che tu possa fare quello che vuoi con esso (sottoclassarlo, gestirne i pulsanti e impostare un timer).

Puoi trovare un MessageBox personalizzato con codice demo nel sito di James Brown.

Con la chiamata MessageBox standard, non è possibile. Per fare ciò dovrai implementare il tuo MessageBox.

Non credo che ciò sia possibile con la chiamata alla finestra di messaggio standard.

Probabilmente sarebbe meglio scrivere la propria finestra di messaggio che include questa funzionalità.

(Oppure, potresti scrivere un thread separato che guarda continuamente lo schermo in attesa che appaia quella finestra di messaggio, disabilita il pulsante Riprova, attendi 10 secondi e riattivalo. Non divertente. Scherzi a parte, seriamente nell'altro modo.)

Da Vista puoi usare il taskdialog - una finestra di dialogo più sofisticata di una semplice finestra di messaggio. Ulteriori informazioni e collegamenti qui .

Sono d'accordo con efotinis, non è impossibile, una volta che hai l'HWND puoi fare quello che vuoi con esso. È solo una questione di " hai davvero bisogno degli hack o stai meglio solo creando la tua finestra di dialogo " ;?

Un altro modo non carino di trovare l'HWND (che ovviamente ti darebbe accesso a tutto ciò nella finestra di messaggio) sarebbe quello di avviare un thread e eseguire il poll ciclicamente per l'handle della finestra di messaggio usando EnumChildWindows. Ma personalmente preferirei anche l'hook WH_CBT.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top