es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Enganchar EN_CHANGE en el diálogo para la subclasificación de CEDIT

Tengo mi propia subclase de clase para CEDIT de la siguiente manera:

class MyEdit : public CEdit....

La he subclasificado en el procedimiento DoDataExchange mediante DDX_control.
En esta clase subclasificada, engancho los eventos ON_CHAR y ON_CHANGE (MyEdit::OnChar, MyEdit::OnChange).

Necesito enganchar el evento ON_CHANGE también en el diálogo padre, pero con la clase subclase no funciona.

¿Existe alguna forma de enviar manualmente un mensaje desde MyEdit::OnChange al diálogo?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Sí, es posible enviar manualmente un mensaje desde MyEdit::OnChange al diálogo padre. Puedes utilizar la función SendMessage para enviar un mensaje a la ventana padre con el mensaje WM_COMMAND y el código de notificación EN_CHANGE.

    Aquí tienes un ejemplo de código:

    void MyEdit::OnChange()
    {
        // Llama a la implementación de la clase base
        CEdit::OnChange();
    
        // Envía la notificación EN_CHANGE al diálogo padre
        HWND parentWnd = GetParent()->GetSafeHwnd();
        if (parentWnd)
        {
            ::SendMessage(parentWnd, WM_COMMAND, MAKEWPARAM(GetDlgCtrlID(), EN_CHANGE), (LPARAM)m_hWnd);
        }
    }
    

    En este código, primero llamamos a la implementación de la clase base OnChange para asegurarnos de que se ejecuta cualquier otra funcionalidad que proporcione. Luego, obtenemos el identificador de la ventana padre utilizando la función GetParent y enviamos el mensaje WM_COMMAND a través de SendMessage. La macro MAKEWPARAM crea el valor wParam combinando el ID de control del control de edición con el código de notificación EN_CHANGE. El valor LPARAM se establece en el identificador del control de edición utilizando m_hWnd.

    Al enviar este mensaje manualmente, el diálogo padre recibirá la notificación EN_CHANGE como si hubiera sido enviada por el control de edición mismo.

Comments are closed.