2009-05-04 24 views
5

Tenemos una aplicación heredada escrita en C que usa WinAPI. Nos gustaría agregar un botón "Sí a todos" en algunos de nuestros cuadros de diálogo. Desafortunadamente, la función MessageBox existente no permite botones personalizados o títulos de botones.¿Cómo puedo crear un botón "Sí a todos" con WinAPI?

¿Cuál es la mejor manera de hacerlo? ¿Hay algún truco hábil para agregar fácilmente un botón personalizado? ¿O deberíamos crear nuestro propio reemplazo de MessageBox?

+3

Um, cree un botón y póngale la leyenda "Sí a todos"? Creo que necesitas ser un poco más específico. –

+0

MessageBox en WinAPI aparentemente no permite crear los propios botones y darles títulos personalizados. Eso hubiera sido lo primero que hubiera intentado. – Brown

+1

Puede personalizar MessageBox(). Use SetWindowsHookEx() para instalar un enlace CBT específico de hilo justo antes de llamar a MessageBox(). Cuando se activa el enganche, tendrá acceso al HWND del diálogo y podrá hacer lo que quiera con él (agregar controles secundarios adicionales, mover controles, cambiar texto, etc.). –

Respuesta

2

Hay otra clase de un cuadro de mensaje en la API de Windows, desde Windows 2000. Es SHMessageBoxCheck.

Se le permite mostrar un estándar MB_OKCANCEL/MB_YESNO/MB_OK de tipo MessageBox con la opción de mostrar Nunca de nuevo, es preciso especificar qué la opción por defecto en ese caso es.

Quizás no sea exactamente lo que estás buscando, pero es bastante coherente con la interfaz de usuario de Windows.

En Vista, la mayoría de los cuadros de diálogo "Sí a todos" funcionan de esta manera; no hay ningún botón adicional que diga "Sí/No a todos"; en su lugar, hay una casilla "Realizar acción elegida en todos los elementos".

Sin embargo, la nota en la documentación me preocupa:

Esta función está disponible a través de Microsoft Windows XP y Windows Server 2003. Podría ser alterado o no están disponibles en las versiones posteriores de las ventanas.

2

También puede ser necesario para cuidar del ajuste de texto para que sea similar a MessageBox. También MessageBox utiliza una fuente diferente en comparación con la fuente de GUI predeterminada. Y no se olvide de reproducir el sonido cuando aparezca el cuadro de diálogo :)

Cuestiones relacionadas