Clase derivada del CEdit para la validación de valores si se utiliza DDX_Text.
Tengo mi propia clase (CMyEdit
) heredada de CEdit
con un procedimiento de validación propio.
Engancho los eventos ON_CHAR
y ON_UPDATE
y valido la entrada del usuario.
Si la entrada es válida, se cambia el atributo CMyEdit::isOk
a true
. CMyEdit
confirma la validez durante cada cambio del contenido del cuadro de edición.
El diálogo podría confirmar la validez utilizando CMyEdit::isOk
.
He anulado el método CEdit::SetWindowText()
inline void CMyEdit::SetWindowText(LPCTSTR lsText)
{
CEdit::SetWindowText(lsText);
Validate(); //se establece isOk como verdadero o falso
}
Pero si el diálogo utiliza DDX_Text
, no se está ejecutando ningún método (ni EN_CHANGE
, ni SetWindowText
).
El mismo problema ocurre cuando el usuario pega un valor desde el portapapeles (WM_PASTE
).
¿Cómo puedo enganchar este cambio del contenido del cuadro de edición?
davy.ai
Para enganchar los cambios realizados en el contenido de EditBox usando
DDX_Text
, puedes sobrescribir la funciónDDX_Text
en tu claseCMyEdit
. Esto te permitirá validar la entrada del usuario y establecer el atributoCMyEdit::isOk
en consecuencia.Aquí tienes un ejemplo de cómo puedes sobrescribir la función
DDX_Text
en tu claseCMyEdit
:Al sobrescribir la función
DDX_Text
, puedes asegurarte de que tu procedimiento de validación se llame cada vez que el cuadro de diálogo actualice el texto en tu controlCMyEdit
utilizandoDDX_Text
.De manera similar, para enganchar los cambios realizados en el contenido de EditBox utilizando el mensaje
WM_PASTE
, puedes sobrescribir la funciónOnPaste
en tu claseCMyEdit
. Esta función se llamará cada vez que el usuario pegue texto en tu EditBox.Aquí tienes un ejemplo de cómo puedes sobrescribir la función
OnPaste
en tu claseCMyEdit
:Al sobrescribir la función
OnPaste
, puedes asegurarte de que tu procedimiento de validación se llame cada vez que el usuario pegue texto en tu controlCMyEdit
.