Pregunta

Tengo el siguiente código de C ++ no administrado:

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

Quiero desactivar el botón RETRY durante 10 segundos (por ejemplo), luego habilitarlo.

¿Cómo puedo hacer esto?

¿Fue útil?

Solución

Me gusta @ffpf dice que necesitas hacer tu propio diálogo para hacer esto, usando MFC, ATL, Win32 en bruto, etc.

Luego crea un temporizador que habilite y deshabilite el botón.

Otros consejos

No puedes manipular directamente los controles de MessageBox, pero puedes usar un hack. Instale un gancho CBT _ justo antes de mostrar el cuadro de diálogo y maneje el evento HCATE _ ACTIVATE. Esto le dará el HWND del cuadro de mensaje, para que pueda hacer lo que quiera con él (subclase, administre sus botones y configure un temporizador).

Puede encontrar un Custom MessageBox con el código de demostración en el sitio de James Brown.

Con la llamada estándar de MessageBox, no puedes. Necesitará implementar su propio MessageBox para hacer esto.

No creo que esto sea posible con la llamada del cuadro de mensaje estándar.

Probablemente sea mejor que escriba su propio cuadro de mensaje que incluya esta funcionalidad.

(O bien, podría escribir un hilo separado que vigile continuamente la pantalla esperando a que aparezca el cuadro de mensaje, deshabilitar el botón de reintento, esperar 10 segundos y volver a habilitarla. No es divertido. En serio, hágalo de otra manera).

Desde Vista, puede usar el diálogo de tareas: un diálogo más sofisticado que un simple cuadro de mensaje. Más información y enlaces aquí .

Estoy de acuerdo con efotinis, no es imposible, una vez que tienes el HWND puedes hacer lo que quieras con él. Es solo una cuestión de " ¿realmente necesitas los trucos o estás mejor con solo crear tu propio cuadro de diálogo de cuadro de mensaje " ;?

Otra forma no tan agradable de encontrar el HWND (que obviamente le daría acceso a todo en el cuadro de mensaje) sería iniciar un hilo y sondear cíclicamente el identificador del cuadro de mensaje utilizando EnumChildWindows. Pero personalmente, también preferiría el gancho WH_CBT.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top