C/Visual C - Crear un CColorDialog de MFC no modal

 
Vista:

Crear un CColorDialog de MFC no modal

Publicado por Antonio (1 intervención) el 14/05/2003 11:11:44
Hola a todos.

Se me ha planteado un problema en una aplicación que estoy construyendo y es que necesito realizar un dialogo del tipo CColorDialog de MFC, pero que sea no modal.

El problema viene es que no se como hacer el Create, ya que no conozco ni el identificador del recurso a que se asocia ni la TemplateName.

Espero que alguien pueda contestarme.
Muchas 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

Creación de un diálogo no modal similar a CColorDialog en MFC

Publicado por Alejandro (1153 intervenciones) el 02/06/2025 23:06:26
Antonio, para crear un diálogo no modal en MFC que funcione de manera similar a `CColorDialog`, puedes seguir estos pasos. A continuación, te muestro cómo hacerlo, incluyendo la creación del diálogo y la gestión de su comportamiento.

1. Crear un diálogo personalizado



Primero, necesitas crear un nuevo diálogo en tu proyecto MFC:

1. Agregar un nuevo recurso de diálogo:
- Haz clic derecho en el proyecto en el Explorador de soluciones y selecciona "Agregar" -> "Recurso".
- Selecciona "Diálogo" y haz clic en "Nuevo".
- Diseña tu diálogo utilizando el editor de recursos. Puedes agregar controles como un `CListBox` para mostrar colores, botones para seleccionar, etc.

2. Definir un ID para el diálogo:
- Asigna un ID a tu nuevo diálogo, por ejemplo, `IDD_COLOR_DIALOG`.

2. Crear una clase para el diálogo



Crea una clase que derive de `CDialog` para manejar el nuevo diálogo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
// ColorDialog.h
#pragma once
#include <afxwin.h>
 
class CColorDialogEx : public CDialog
{
public:
    CColorDialogEx(CWnd* pParent = nullptr);   // Constructor
    virtual BOOL OnInitDialog();                // Inicialización del diálogo
    afx_msg void OnBnClickedOk();               // Manejo del botón OK
    afx_msg void OnBnClickedCancel();           // Manejo del botón Cancelar
 
    DECLARE_MESSAGE_MAP()
};
 
// ColorDialog.cpp
#include "ColorDialog.h"
#include "resource.h" // Asegúrate de incluir el archivo de recursos
 
CColorDialogEx::CColorDialogEx(CWnd* pParent /*=nullptr*/)
    : CDialog(IDD_COLOR_DIALOG, pParent)
{
}
 
BOOL CColorDialogEx::OnInitDialog()
{
    CDialog::OnInitDialog();
    // Inicializa los controles aquí (por ejemplo, carga colores en un CListBox)
    return TRUE; // Devuelve TRUE a menos que establezcas el foco en un control
}
 
void CColorDialogEx::OnBnClickedOk()
{
    // Maneja la selección de color y cierra el diálogo
    EndDialog(IDOK);
}
 
void CColorDialogEx::OnBnClickedCancel()
{
    // Cierra el diálogo sin hacer nada
    EndDialog(IDCANCEL);
}
 
BEGIN_MESSAGE_MAP(CColorDialogEx, CDialog)
    ON_BN_CLICKED(IDOK, &CColorDialogEx::OnBnClickedOk)
    ON_BN_CLICKED(IDCANCEL, &CColorDialogEx::OnBnClickedCancel)
END_MESSAGE_MAP()

3. Crear y mostrar el diálogo no modal



Para mostrar el diálogo no modal, puedes hacerlo desde cualquier parte de tu aplicación, como un controlador de eventos:

1
2
3
4
5
6
7
// En tu clase principal o donde necesites mostrar el diálogo
void CYourClass::ShowColorDialog()
{
    CColorDialogEx* pColorDialog = new CColorDialogEx(this);
    pColorDialog->Create(IDD_COLOR_DIALOG, this); // Crea el diálogo
    pColorDialog->ShowWindow(SW_SHOW); // Muestra el diálogo
}

4. Manejo de eventos



Asegúrate de manejar los eventos de los controles dentro de tu diálogo para que el usuario pueda seleccionar colores y realizar otras acciones.

5. Limpieza



Recuerda que, al ser un diálogo no modal, deberás gestionar la memoria adecuadamente. Puedes usar `delete` en el destructor de tu clase principal o en el evento de cierre del diálogo.

Conclusión



Con estos pasos, deberías poder crear un diálogo no modal que funcione de manera similar a `CColorDialog`. Puedes personalizar el diálogo según tus necesidades, añadiendo más controles y funcionalidades.
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