Red de conocimiento informático - Aprendizaje de programación - Problemas de programación del cuadro de diálogo MFC

Problemas de programación del cuadro de diálogo MFC

1. Cuadros de diálogo modales y cuadros de diálogo no modales

Los cuadros de diálogo de Windows se dividen en dos categorías: cuadros de diálogo modales y cuadros de diálogo no modales.

Un cuadro de diálogo modal es un cuadro de diálogo. Cuando aparece, otras ventanas de esta aplicación ya no aceptarán la entrada del usuario. Solo este cuadro de diálogo responde a la entrada del usuario y sale después de realizar las operaciones correspondientes en él. , otras ventanas pueden continuar interactuando con el usuario.

El cuadro de diálogo no modal es que después de que aparece, otras ventanas del programa aún pueden responder a la entrada del usuario. Los cuadros de diálogo no modal se utilizan generalmente para mostrar información rápida, etc.

Todo el mundo conoce muy bien el sistema Windows y creo que ambos cuadros de diálogo deberían haberse encontrado. El cuadro de diálogo anterior para agregar calculadora era en realidad un cuadro de diálogo modal.

2. Cómo aparece el cuadro de diálogo modal

Después de todo, la mayoría de los programas de calculadora de sumas son generados automáticamente por MFC, por lo que es posible que no sepas cómo aparece el cuadro de diálogo modal. Permítanme hablar brevemente sobre dónde aparece y luego volver a crear un nuevo cuadro de diálogo y abrirlo, para que después de practicar, pueda usar el cuadro de diálogo modal de manera más flexible.

Cuando abre el archivo Addition.cpp, puede ver que la clase CAdditionApp tiene una función InitInstance(). Esta función se mencionó en el análisis del marco de la aplicación MFC, pero está en la aplicación de documento único. Clase App., los cuerpos de las funciones no son los mismos, pero todos inicializan instancias de la clase App.

Hay un fragmento de código en la segunda mitad de la función InitInstance() que define el objeto del cuadro de diálogo y muestra el cuadro de diálogo. Este código se proporciona a continuación y se comenta:

Código C++

CAdditionDlg dlg; // Definir el objeto dlg de la clase del cuadro de diálogo CAdditionDlg

m_pMainWnd = &dlg; >INT_PTR nResponse = dlg.DoModal(); // Abre el cuadro de diálogo dlg y asigna el valor de retorno de la función DoModal (el ID del botón en el que se hizo clic al salir) a nResponse

if (nResponse) == IDOK) // Determinar el valor de retorno Si es un botón Aceptar (su ID es IDOK, el pollo picoteando arroz lo ha eliminado)

{

// TODO: Colocar código aquí para manejar cuando el diálogo es

// descartado con OK

}

else if (nResponse == IDCANCEL) // Determina si el valor de retorno es el botón Cancelar (su ID es IDCANCEL, el pollo picoteará el arroz) Su título ha sido cambiado al lugar divertido)

{

// TODO: Coloque el código aquí para manejar cuando el diálogo es

// descartado con Cancelar

}

Una de las funciones más críticas para abrir un cuadro de diálogo es la función DoModal() de la clase del cuadro de diálogo. El prototipo de la función CDialog::DoModal() es:

virtual INT_PTR DoModal();

Valor de retorno: valor entero, especificado para pasar a CDialog::EndDialog (este La función se utiliza para cerrar el cuadro de diálogo) nValor del parámetro Resultado.

Si la función no puede crear el cuadro de diálogo, devuelve -1; si ocurren otros errores, devuelve IDABORT.

Cuando se llama, aparecerá el cuadro de diálogo. El valor de retorno es el ID del botón en el que se hizo clic al salir del cuadro de diálogo. Por ejemplo, si hacemos clic en el botón de salir, el valor de retorno de DoModal. es IDCANCELAR.

3. Añade un nuevo cuadro de diálogo y haz que aparezca.

Chicken Pecking Rice agrega un cuadro de diálogo al programa de calculadora de sumas para preguntar al usuario si está seguro de realizar el cálculo antes. cálculo. Puede echar un vistazo completo al proceso de adición y aparición del cuadro de diálogo.

1. De acuerdo con el método descrito en Creación de una plantilla de cuadro de diálogo y Modificación de propiedades del cuadro de diálogo, haga clic derecho en el cuadro de diálogo en la Vista de recursos y seleccione Insertar cuadro de diálogo para crear una nueva plantilla de cuadro de diálogo, modifique su ID a IDD_TIP_DIALOG. , cambie el título a "Consejos", luego consulte "Agregar controles al cuadro de diálogo" para agregar un cuadro de texto estático (texto estático) en la plantilla del cuadro de diálogo, cambie el título a "Está seguro de que desea continuar" Cálculo adicional Mire, luego cambie el título del botón Aceptar a "Aceptar", el título del botón Cancelar a "Cancelar" y finalmente ajuste la posición de cada control y el tamaño del cuadro de diálogo. La plantilla del cuadro de diálogo final se muestra a continuación:

2. Según el método de crear una clase de cuadro de diálogo y agregar una variable de control, haga clic derecho en la plantilla del cuadro de diálogo y seleccione Agregar clase... Aparecerá un cuadro de diálogo para agregar una clase, establezca el nombre de la clase en CTipDlg y haga clic en Aceptar. En el Explorador de soluciones, puede ver que se generan el archivo de encabezado TipDlg.h y el archivo fuente TipDlg.cpp de la clase CTipDlg.

3. Si queremos que aparezca este cuadro de diálogo de solicitud después de hacer clic en el botón calculado, debemos acceder a la clase de diálogo de solicitud en la función de procesamiento de mensajes OnBnClickedAddButton() del botón calculado, por lo que para poder acceder Clase CTipDlg, incluya el archivo de encabezado de CTipDlg en AdditionDlg.cpp: #include "TipDlg.h".

4. Modifique el cuerpo de la función de OnBnClickedAddButton(), construya el objeto tipDlg de la clase CTipDlg antes de todos los códigos y abra el cuadro de diálogo a través de la declaración tipDlg.DoModal();, y finalmente determine el retorno de la función DoModal() El valor es IDOK o IDCANCEL para determinar si se continúa con el cálculo.

La función OnBnClickedAddButton() se modifica de la siguiente manera:

Código C++

void CAdditionDlg::OnBnClickedAddButton()

{

// TODO: agregue aquí el código del controlador de notificaciones de control

INT_PTR nRes; // Se utiliza para guardar el valor de retorno de la función DoModal

CTipDlg tipDlg // Construye una instancia de la clase de diálogo. CTipDlg

nRes = tipDlg.DoModal(); // Abrir el cuadro de diálogo

if (IDCANCEL == nRes) // Determinar si el valor de retorno después de salir del cuadro de diálogo es IDCANCEL, si es así, regresa, de lo contrario continúa Ejecutar hacia abajo

return

// Guarda los datos en cada control en las variables correspondientes

UpdateData(TRUE) ;

// Asigna la suma del sumando y el sumando a m_editSum

m_editSum = m_editSummand + m_editAddend

// Actualiza el control correspondiente según el valor. de cada variable. El cuadro de edición de y mostrará el valor de m_editSum

UpdateData(FALSE);

}

5. Pruebe. Después de compilar y ejecutar el programa, ingrese el sumando y el sumando en el cuadro de diálogo, haga clic en Calcular y aparecerá un cuadro de diálogo que le preguntará si desea realizar el cálculo. Si selecciona Aceptar, el cuadro de diálogo se cerrará y se mostrará en. el cuadro de diálogo principal. La suma del sumando y el sumando. Si elige cancelar el cálculo, el cuadro de diálogo emergente también saldrá, pero la suma que se muestra en el cuadro de diálogo principal permanece sin cambios, es decir, no se realiza ningún cálculo de suma. .