C/Visual C - CEDIT Y CRICHTCTRL

 
Vista:

CEDIT Y CRICHTCTRL

Publicado por edu (3 intervenciones) el 27/02/2001 01:34:03
Haber tengo unas inquietudes. La primera es en el control que tengo que
derive de CEDIT..... Yo quiero que cuando ese control obtenga el FOCO el
fondo se pinte de color Amarillo CLARO.....

Ese lo logre hize que cuando tuviera el FOCO se pintara de AMARILLO CLARO el
problema es que me presenta una Frama BLANCA que es lo equivalente al area
de escritura..... Es decir tengo un fondo AMARILLO y otro pequeño BLANCO que
es donde se escribe. Como hago para alterar ese color BLANCO.

Otra Pregunta inserte un RICHEDIT que era mas facil que CEdit ya que la
propiedad SetBackGraundColor me cambia color de manera perfecta y sin
alterar cuando voy a escribir, es decir, no me aparece el rectangulo
BLANCO.. Pero hay un problema COMO CAPTURO LOS EVENTOS DEL RICH uso el
Mensaje EN_SETFOCUS pero cuando le doy el FOCO no ejecuta ese mensaje.....
Probe con EN_CHANGE que se supone es un mensaje que se ejecuta cuando
cambia el contenido Y NADA!!!!! POR QUE????? He visto a diferencia del CEDIT
que el EVENTO SETFOCUS del RIch tiene unos parametros en la funcion, que no
tiene CEDIT, ahora esos parametros tienes algo que ver.......

GRacias!!
Atte.
Eduardo
Caracas-Vzla

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 color de fondo y capturar eventos en un control derivado de CEdit y RichEdit

Publicado por Alejandro (913 intervenciones) el 06/09/2024 00:47:16
Eduardo, para cambiar el color de fondo y capturar eventos en un control derivado de CEdit y RichEdit en C/Visual C, puedes seguir los siguientes pasos:

1. Para cambiar el color de fondo en un control derivado de CEdit, puedes utilizar el mensaje `WM_CTLCOLOR` en la función `OnCtlColor`. Aquí tienes un ejemplo de cómo hacerlo:

1
2
3
4
5
6
7
8
9
10
HBRUSH CMyEditControl::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) {
    HBRUSH hbr = CEdit::OnCtlColor(pDC, pWnd, nCtlColor);
 
    if (nCtlColor == CTLCOLOR_EDIT && pWnd == this) {
        pDC->SetBkColor(RGB(255, 255, 0)); // Establece el color de fondo a amarillo claro
        hbr = m_brush; // Utiliza un pincel personalizado para el fondo
    }
 
    return hbr;
}

Asegúrate de declarar `m_brush` como una variable miembro de tu clase y crear un pincel con el color de fondo deseado.

2. Para capturar eventos en un control derivado de RichEdit, puedes utilizar los mensajes `EN_SETFOCUS` y `EN_CHANGE`. Sin embargo, es importante tener en cuenta que estos mensajes no se envían automáticamente al control cuando obtiene el foco o cambia el contenido. Debes asegurarte de habilitar la notificación de eventos utilizando el estilo `ES_NOTIFY` al crear el control. Aquí tienes un ejemplo de cómo hacerlo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
BOOL CMyRichEditControl::PreCreateWindow(CREATESTRUCT& cs) {
    cs.style |= ES_NOTIFY; // Habilita la notificación de eventos
    return CRichEditCtrl::PreCreateWindow(cs);
}
 
void CMyRichEditControl::OnSetFocus(CWnd* pOldWnd) {
    CRichEditCtrl::OnSetFocus(pOldWnd);
 
    // Tu código para manejar el evento de obtener el foco
}
 
void CMyRichEditControl::OnChange() {
    // Tu código para manejar el evento de cambio de contenido
}

Asegúrate de que tu clase derivada de RichEditCtrl tenga los manejadores de eventos `OnSetFocus` y `OnChange` implementados.

Espero que esta información te sea útil.

Saludos,
Ale
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