C/Visual C - Cambiar el boton "Default" en la ejecucion

 
Vista:

Cambiar el boton "Default" en la ejecucion

Publicado por orionmaps (1 intervención) el 12/08/2002 22:19:31
Como puedo cambiar el boton "Default" durante la ejecucion del programa en una ventana de dialogo.

un libro me dice que es asi...

CDialogoAnadir Dlgo;
Dlgo.SetDefID(IDOK);

pero me da error en la ejecucuion

Lo quiero conseguir es que cuando recibe un edit el foco se ponga en default un boton

Gracias de antemano
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

Cambiar el botón "Default" en un diálogo durante la ejecución

Publicado por Alejandro (913 intervenciones) el 14/03/2025 17:35:26
Para cambiar el botón "Default" en un diálogo de MFC (Microsoft Foundation Classes) durante la ejecución, puedes utilizar el método `SetDefID` de la clase `CDialog`. Sin embargo, es importante asegurarte de que estás llamando a este método en el contexto adecuado y que el diálogo está correctamente inicializado.

Paso 1: Asegúrate de que el diálogo esté inicializado



Primero, asegúrate de que tu diálogo esté correctamente inicializado y que estés llamando a `SetDefID` en el momento adecuado. Por lo general, esto se hace en el método `OnInitDialog` o en respuesta a un evento específico, como cuando se recibe un input en un control de edición.

Paso 2: Cambiar el botón "Default"



Aquí tienes un ejemplo de cómo cambiar el botón "Default" en un diálogo cuando se recibe un input en un control de edición:

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
#include "afxwin.h"
 
class CDialogoAnadir : public CDialog
{
public:
    CDialogoAnadir(CWnd* pParent = nullptr) : CDialog(IDD_DIALOGO_ANADIR, pParent) {}
 
protected:
    virtual BOOL OnInitDialog() override {
        CDialog::OnInitDialog();
        // Inicializa el botón por defecto
        SetDefID(IDOK); // IDOK es el ID del botón que quieres establecer como default
        return TRUE; // Devuelve TRUE a menos que se establezca el foco en un control
    }
 
    afx_msg void OnEnChangeEditControl() {
        // Cambia el botón por defecto cuando se recibe un input en el control de edición
        SetDefID(IDC_BUTTON_DEFAULT); // Cambia IDC_BUTTON_DEFAULT por el ID de tu botón
        // Redibuja el diálogo para reflejar el cambio
        UpdateData(FALSE);
    }
 
    DECLARE_MESSAGE_MAP()
};
 
BEGIN_MESSAGE_MAP(CDialogoAnadir, CDialog)
    ON_EN_CHANGE(IDC_EDIT_CONTROL, &CDialogoAnadir::OnEnChangeEditControl) // Cambia IDC_EDIT_CONTROL por el ID de tu control de edición
END_MESSAGE_MAP()

Paso 3: Asegúrate de que el botón tenga el estilo "Default"



Asegúrate de que el botón que deseas establecer como "Default" tenga el estilo adecuado. Esto se puede hacer en el recurso del diálogo (en el editor de recursos) asegurándote de que el botón tenga la propiedad "Default" marcada.

Paso 4: Llamar al diálogo



Cuando llames a tu diálogo, asegúrate de que se muestre correctamente:

1
2
3
4
CDialogoAnadir dlg;
if (dlg.DoModal() == IDOK) {
    // Maneja la acción cuando se presiona OK
}

Notas adicionales



1. Redibujo: Después de cambiar el botón "Default", es posible que necesites llamar a `UpdateData(FALSE)` o `Invalidate()` para asegurarte de que el diálogo se redibuje correctamente y refleje el cambio.
2. Errores: Si sigues teniendo errores, asegúrate de que los IDs de los controles sean correctos y que el diálogo esté correctamente configurado en el editor de recursos.

Con este enfoque, deberías poder cambiar el botón "Default" en tu diálogo de MFC durante la ejecución del programa. ¡Buena suerte, OrionMaps!
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