C/Visual C - varias cajas de diálogo no modales

 
Vista:

varias cajas de diálogo no modales

Publicado por xuru (8 intervenciones) el 05/02/2001 19:21:42
Estoy desarrollando una aplicacion SDI mediante MFC-s y partiendo de la clase
CFormView para la vista. La aplicación tiene que visualizar varios diálogos POPUP
no modales simultaneamente a las que se accedera desde un menú que está en
otro diálogo no modal, y que cubrirán por completo la pantalla, por lo que en
principio el diálogo base de la SDI no tiene utilidad alguna. Para visualizar los
diálogos utilizo la funciónCWnd::ShowWindow(), pero tengo el siguiente problema:
-Si la ventana del menú no tiene la propiedad WS_EX_TRANSPARENT, no me
deja visualizar más de dos ventanas a la vez.
-Si le pongo dicha propiedad, cuando le doy a Ctrl-Esc y accedo a la barra de
windows y después vuelvo a quitarla no hay forma de que me redibuje el diálogo
del menú.
POR FAVOR, AGRADECERÍA CUALQUIER AYUDA
GRACIAS
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro

Visualización de múltiples diálogos no modales simultáneamente en una aplicación SDI con MFC

Publicado por Alejandro (913 intervenciones) el 05/09/2024 20:06:59
Xuru, para solucionar el problema que estás experimentando al visualizar múltiples diálogos no modales simultáneamente en una aplicación SDI con MFC, puedes seguir los siguientes pasos:

1. Asegúrate de que los diálogos no modales se crean correctamente: Verifica que estás creando y mostrando los diálogos no modales de manera adecuada. Puedes utilizar la función `Create` para crear los diálogos y luego llamar a `ShowWindow` para mostrarlos.

2. Configura correctamente las propiedades de las ventanas: Asegúrate de que las ventanas de los diálogos no modales tengan las propiedades adecuadas. Puedes utilizar la función `SetWindowLongPtr` para establecer las propiedades de la ventana, como `WS_EX_TRANSPARENT` si es necesario.

3. Maneja los mensajes de redibujado: Para solucionar el problema de redibujado después de acceder a la barra de Windows, puedes manejar el mensaje `WM_PAINT` en el diálogo del menú y llamar a `Invalidate` para forzar el redibujado de la ventana.

Aquí tienes un ejemplo de cómo podrías manejar el mensaje `WM_PAINT` en el diálogo del menú:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// En el archivo de encabezado del diálogo del menú
afx_msg void OnPaint();
DECLARE_MESSAGE_MAP()
 
// En el archivo de implementación del diálogo del menú
BEGIN_MESSAGE_MAP(CMenuDialog, CDialog)
    ON_WM_PAINT()
END_MESSAGE_MAP()
 
void CMenuDialog::OnPaint()
{
    CPaintDC dc(this);
    // Realiza el dibujado necesario en la ventana del menú
    // ...
    // Llama a Invalidate para forzar el redibujado
    Invalidate();
}

Recuerda que estos son solo pasos generales y pueden requerir ajustes adicionales según tu implementación específica. También te recomendaría consultar la documentación de MFC y buscar ejemplos de código relacionados con la visualización de múltiples diálogos no modales en una aplicación SDI.

Espero que esta información te sea útil y te ayude a resolver el problema.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar