Tutorial: Agregar una clase CTaskDialog a una aplicación
En este tutorial se presenta la CTaskDialog Class y se muestra cómo agregar una a la aplicación.
CTaskDialog
es un cuadro de diálogo de tarea que reemplaza el cuadro de mensaje de Windows en Windows Vista o posterior. La clase CTaskDialog
mejora el cuadro de mensaje original y agrega funcionalidad. Todavía se admite el cuadro de mensaje de Windows en Visual Studio.
Nota:
Las versiones de Windows anteriores a Windows Vista no admiten CTaskDialog
. Debe programar una opción de cuadro de diálogo alternativa si quiere mostrar un mensaje a un usuario que ejecute la aplicación en una versión anterior de Windows. Puede usar el método estático CTaskDialog::IsSupported para determinar en tiempo de ejecución si el equipo de un usuario puede mostrar una clase CTaskDialog
. Además, la clase CTaskDialog
solo está disponible cuando la aplicación se compila con la biblioteca de Unicode.
La clase CTaskDialog
admite varios elementos opcionales para recopilar y mostrar información. Por ejemplo, una clase CTaskDialog
puede mostrar vínculos de comandos, botones personalizados, iconos personalizados y un pie de página. La clase CTaskDialog
también tiene varios métodos que permiten consultar el estado del cuadro de diálogo de tarea para determinar qué elementos opcionales seleccionó el usuario.
Requisitos previos
Necesitará los componentes siguientes para completar este tutorial:
Visual Studio 2010 o versiones posteriores
Windows Vista o posterior
Reemplazar un cuadro de mensaje de Windows por una clase CTaskDialog
En el procedimiento siguiente se muestra el uso más básico de la clase CTaskDialog
, que consiste en reemplazar el cuadro de mensaje de Windows. En este ejemplo también se cambia el icono asociado al cuadro de diálogo de tarea. Si se cambia el icono, la clase CTaskDialog
parece igual al cuadro de mensaje de Windows.
Para reemplazar un cuadro de mensaje de Windows con una clase CTaskDialog
Usa el Asistente para aplicaciones MFC para crear una aplicación MFC con toda la configuración predeterminada. Consulte Tutorial: Uso de los nuevos controles de shell de MFC para obtener instrucciones sobre cómo abrir el asistente para su versión de Visual Studio.
Llámalo MyProject.
Use el Explorador de soluciones para abrir el archivo MyProject.cpp.
Agregue
#include "afxtaskdialog.h"
después de la lista de incluye.Busque el método
CMyProjectApp::InitInstance
. Inserte las siguientes líneas de código antes de la instrucciónreturn TRUE;
. Este código crea las cadenas que se usan en el cuadro de mensaje de Windows o en la claseCTaskDialog
.CString message("My message to the user"); CString dialogTitle("My Task Dialog title"); CString emptyString;
Agregue el código siguiente después del código del paso 4. Este código garantiza que el equipo del usuario admita la clase
CTaskDialog
. Si no se admite el cuadro de diálogo, la aplicación muestra en su lugar un cuadro de mensaje de Windows.if (CTaskDialog::IsSupported()) { } else { AfxMessageBox(message); }
Inserte el siguiente código entre corchetes después de la instrucción
if
del paso 5. Este código crea la claseCTaskDialog
.CTaskDialog taskDialog(message, emptyString, dialogTitle, TDCBF_OK_BUTTON);
En la línea siguiente, agregue el código siguiente. Este código establece el icono de advertencia.
taskDialog.SetMainIcon(TD_WARNING_ICON);
En la línea siguiente, agregue el código siguiente. Este código muestra el cuadro de diálogo de tarea.
taskDialog.DoModal();
Puedes evitar el paso 7 si no quieres que la clase CTaskDialog
muestre el mismo icono que el cuadro de mensaje de Windows. Si evitas este paso, CTaskDialog
no tendrá icono cuando la aplicación la muestre.
Compile y ejecute la aplicación. La aplicación muestra el cuadro de diálogo de tareas después de iniciarse.
Agregar funcionalidad a la clase CTaskDialog
En el procedimiento siguiente se muestra cómo agregar funcionalidad a la clase CTaskDialog
que creó en el procedimiento anterior. En el código de ejemplo se muestra cómo ejecutar instrucciones específicas según las selecciones del usuario.
Para agregar funcionalidad a la clase CTaskDialog
Vaya a la Vista de recursos. Si no ves la Vista de recursos, puede abrirla desde el menú Vista.
Expanda la Vista de recursos hasta que pueda seleccionar la carpeta Tabla de cadenas . Expándala y haga doble clic en la entrada Tabla de cadenas .
Desplácese a la parte inferior de la tabla de cadenas y agregue una nueva entrada. Cambie el identificador a
TEMP_LINE1
. Establezca el título en Línea de comandos 1.Agregue otra entrada nueva. Cambie el identificador a
TEMP_LINE2
. Establezca el título en Línea de comandos 2.Vuelva a MyProject.cpp.
Después de
CString emptyString;
, agregue el código siguiente:CString expandedLabel("Hide extra information"); CString collapsedLabel("Show extra information"); CString expansionInfo("This is the additional information to the user,\nextended over two lines.");
Busque la instrucción
taskDialog.DoModal()
y reemplácela por el código siguiente. Este código actualiza el cuadro de diálogo de tarea y agrega nuevos controles:taskDialog.SetMainInstruction(L"Warning"); taskDialog.SetCommonButtons( TDCBF_YES_BUTTON | TDCBF_NO_BUTTON | TDCBF_CANCEL_BUTTON); taskDialog.LoadCommandControls(TEMP_LINE1, TEMP_LINE2); taskDialog.SetExpansionArea( expansionInfo, collapsedLabel, expandedLabel); taskDialog.SetFooterText(L"This is a small footnote to the user"); taskDialog.SetVerificationCheckboxText(L"Remember your selection");
Agregue la siguiente línea de código que muestra al usuario el cuadro de diálogo de tarea y recupera la selección del usuario:
INT_PTR result = taskDialog.DoModal();
Inserte el código siguiente detrás de la llamada a
taskDialog.DoModal()
. Esta sección de código procesa la entrada del usuario:if (taskDialog.GetVerificationCheckboxState()) { // PROCESS IF the user selects the verification checkbox } switch (result) { case TEMP_LINE1: // PROCESS IF the first command line break; case TEMP_LINE2: // PROCESS IF the second command line break; case IDYES: // PROCESS IF the user clicks yes break; case IDNO: // PROCESS IF the user clicks no break; case IDCANCEL: // PROCESS IF the user clicks cancel break; default: // This case should not be hit because closing // the dialog box results in IDCANCEL break; }
En el código del paso 9, reemplaza los comentarios que comienzan con PROCESS IF
por el código que quiere ejecutar en las condiciones especificadas.
Compile y ejecute la aplicación. La aplicación muestra el cuadro de diálogo de tarea que usa los controles nuevos y la información adicional.
Mostrar una clase CTaskDialog sin crear un objeto CTaskDialog
En el procedimiento siguiente se muestra cómo mostrar una clase CTaskDialog
sin crear primero un objeto CTaskDialog
. En este ejemplo se siguen los procedimientos anteriores.
Para mostrar una clase CTaskDialog sin crear un objeto CTaskDialog
Abre el archivo MyProject.cpp si todavía no está abierto.
Vaya al corchete de cierre de la instrucción
if (CTaskDialog::IsSupported())
.Inserte el código siguiente inmediatamente antes del corchete de cierre de la instrucción
if
(antes del bloqueelse
):HRESULT result2 = CTaskDialog::ShowDialog(L"My error message", L"Error", L"New Title", TEMP_LINE1, TEMP_LINE2);
Compile y ejecute la aplicación. La aplicación muestra dos cuadros de diálogo de tarea. El primer cuadro de diálogo es del Para agregar funcionalidad a la clase CTaskDialog; el segundo cuadro de diálogo es del último procedimiento.
En estos ejemplos no se muestran todas las opciones disponibles para un CTaskDialog
, pero te ayudarán a empezar a trabajar. Vea CTaskDialog Class para obtener una descripción completa de la clase.
Consulte también
Cuadros de diálogo
CTaskDialog (clase)
CTaskDialog::CTaskDialog