2011-10-21 12 views
7

Desidero creare una casella di messaggio personalizzata. Quello che voglio personalizzare è il testo del pulsante.Casella messaggi personalizzati Win32

MessageBoxW(
    NULL, 
    L"Target folder already exists. Do you want to overwrite the folder?", 
    L"No title", 
    MB_YESNOCANCEL | MB_ICONQUESTION 
); 

Mi piacerebbe cambiare solo il testo pulsanti per Overwrite, Skip, Cancel.
Qual è il modo più semplice?

Devo fare in modo che abbia lo stesso aspetto con la finestra di dialogo predefinita di Windows.

risposta

7

Come detto da altri, un modo tipico è creare una risorsa di dialogo e avere una finestra di dialogo completamente indipendente, quale GUI è necessario progettare nel modo in cui appare come una finestra di dialogo standard (per soddisfare la richiesta di tatto e aspetto) . Se si desidera accettare messaggi di testo, è probabile che sia necessario aggiungere un codice che ridimensiona la finestra in modo appropriato.

Tuttavia, c'è un'altra opzione per coloro che hanno voglia di immergersi nelle cose avanzate. Mentre l'API MessageBox non offre molto per la messa a punto su Fint, hai ancora SetWindowsHookEx nelle tue mani. Dopo aver registrato il gancio, è possibile intercettare la procedura standard della finestra MessageBox e la sottoclasse nel modo che preferisci.

cose tipiche includono:

  • pulsante modifica del testo
  • l'aggiunta di ulteriori controlli
  • aggiungendo automatico temporizzato vicino

Hooking finestra standard può fare tutto di quelli.

UPD. Ehi, ho capito di avere del codice con da condividere: http://alax.info/blog/127

+0

Non sta aggiungendo i comandi a una messagebox con i ganci delle finestre difettosi? Perché cosa succederebbe se una prossima versione di Windows aggiungesse altri controlli alla messagebox o li spostasse? – stackptr

+0

@cpp_prog: sì, uno dovrebbe pensarci due volte prima di farlo. D'altra parte, se tutto ciò che vuoi è auto-chiudente, allora perché non riutilizzare la finestra dei messaggi ben fatta invece di crearne di nuovi fin dall'inizio. –

1

Creare una risorsa di dialogo (con un editor GUI o manualmente) e chiamare DialogBox su di esso. Non c'è modo di modificare il comportamento di MessageBox, diverso da quello supportato dai suoi argomenti.

Detto questo, la tua casella di messaggio può utilizzare molto bene le opzioni Sì/No.

2

È possibile creare una finestra di dialogo personalizzata. Oppure puoi usare un gancio per finestra come descritto in in this article.

0

La funzionalità task dialog introdotta in Vista fa esattamente quello che vuoi e segue il tema del sistema prevalente. Tuttavia, se devi supportare XP, questo ti sarà di grande conforto.