2011-10-21 26 views
7

Quiero hacer un cuadro de mensaje personalizado. Lo que quiero personalizar es el texto del botón.Win32 cuadro de mensaje personalizado

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

me gustaría simplemente cambiar el texto botones para Overwrite, Skip, Cancel.
¿Cuál es la forma más simple?

Tengo que hacer que esto tenga el mismo aspecto con el cuadro de mensaje predeterminado de Windows.

Respuesta

7

Como dijeron otros, una forma típica es crear un recurso de diálogo y tener un diálogo completamente independiente, qué GUI debe diseñar de forma similar a un diálogo estándar (para satisfacer su solicitud de sensación y apariencia) . Si desea aceptar mensajes de texto, es probable que deba agregar un código que cambie el tamaño de la ventana de manera apropiada.

Aún así, hay otra opción para aquellos que tienen ganas de sumergirse en cosas avanzadas. Mientras que MessageBox API no ofrece mucho para afinar, todavía tiene SetWindowsHookEx en sus manos. Después de registrar el gancho, puede interceptar el procedimiento de ventana estándar MessageBox y crear una subclase de la manera que desee.

cosas típicas incluyen:

  • cambiar el texto del botón
  • añadir más controles
  • añadiendo automático temporizado cerca

El enganchar ventana estándar puede hacer todo eso.

UPD. Oye, me di cuenta de que tengo un código con SetWindowsHookEx para compartir: http://alax.info/blog/127

+0

¿No está agregando controles a un cuadro de mensaje con ganchos de ventana dañados? Porque, ¿qué pasaría si una próxima versión de Windows agrega algunos otros controles al cuadro de mensaje o los mueve? – stackptr

+0

@cpp_prog: sí, uno debería pensar dos veces antes de hacer esto. Por otro lado, si todo lo que quiere es un cierre automático, entonces, ¿por qué no reutilizar el cuadro de mensaje bien hecho en lugar de crear uno propio desde el principio? –

1

Realice un recurso de diálogo (con un editor de GUI, o a mano) y llame al DialogBox en él. No hay forma de alterar el comportamiento de MessageBox, que no sea lo que admiten sus argumentos.

Dicho esto, su cuadro de mensaje puede usar opciones stock Sí/No.

2

Puede crear un cuadro de diálogo propio. O puede usar un gancho para ventana como se describe en in this article.

0

La funcionalidad task dialog presentada en Vista hace exactamente lo que quiere y sigue el tema del sistema predominante. Sin embargo, si tiene que ser compatible con XP, esto no le servirá de mucho consuelo.

Cuestiones relacionadas