Come posso creare un pulsante "Sì a tutti" utilizzando WinAPI?
Domanda
Abbiamo un'applicazione legacy scritta in C che utilizza WinAPI. Vorremmo aggiungere un " Sì a tutti " pulsante per alcune delle nostre finestre di dialogo. Sfortunatamente, la funzione MessageBox esistente non consente pulsanti personalizzati o didascalie di pulsanti.
Qual è il modo migliore per farlo? C'è un trucco slick per aggiungere facilmente un pulsante personalizzato? O dovremmo creare la nostra sostituzione MessageBox?
Soluzione 4
Abbiamo appena finito di creare il nostro modello di risorsa di sostituzione DIALOGEX, quindi basta chiamare DialogBox () e controllare il valore restituito.
Riferimento: http://msdn.microsoft.com /library/ms644996(v=VS.85).aspx#modal_box
Altri suggerimenti
Qualcosa del genere forse? http://www.codeproject.com/KB/dialog/CRHYesNoToAllDialog.aspx
O questo: Utilizzo di hook di Windows per migliorare MessageBox in .NET
Marc
Esiste un altro tipo di finestra di messaggio in WinAPI, da Windows 2000. È SHMessageBoxCheck
.
Ti consente di visualizzare un MB_OKCANCEL standard
/ MB_YESNO
/ MB_OK
-type MessageBox
con l'opzione per Non mostrarlo mai più, specificando quale opzione predefinita in quel caso è.
Forse non è esattamente quello che stai cercando, ma è abbastanza coerente con l'interfaccia utente di Windows.
In Vista la maggior parte della shell " Sì a tutte " le finestre di dialogo funzionano in questo modo - non c'è alcun pulsante aggiuntivo che dice " Sì / No a tutti " - c'è un " Esegui l'azione scelta su tutti gli elementi " casella di controllo invece.
Comunque la Nota nella documentazione mi preoccupa:
Questa funzione è disponibile tramite Microsoft Windows XP e Windows Server 2003. Potrebbe essere modificata o non disponibile nelle versioni successive di Windows.
Potrebbe anche essere necessario occuparsi della disposizione del testo per renderlo simile a MessageBox
. Anche MessageBox
utilizza un font diverso rispetto al font GUI predefinito. E non dimenticare di riprodurre l'audio quando viene visualizzata la finestra di dialogo :)