C/Visual C - Dibujar sobre picture box

 
Vista:

Dibujar sobre picture box

Publicado por Arise (37 intervenciones) el 07/10/2002 13:02:08
Hola,
Estoy realizando un programa en VC++ donde necesito mostrar una grafica en un dialogo. Mi idea es dibujarlas y he pensado ke es mas facil crear un picture box para poder realizar una invalidacion del dialogo y que se repinte solo el dibujo. El problema es ke no me aparece ningun dibujo en el picture box. El codigo ke he utilizado es el siguiente:
...//
CClientDC dc(this);
dc.SelectObject(m_CtrlGrafica1);
CPen *MiPluma = new CPen(estilop, anchop, colorp);
CPen *PlumaAnterior = dc.SelectObject(MiPluma);

dc.MoveTo(0,0);
dc.LineTo(5,5);
donde m_CtrlGrafica1 es la variable asociada al picture box.
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

Dibujo en Picture Box en un diálogo

Publicado por Alejandro (1153 intervenciones) el 24/03/2025 23:10:59
Arise, el problema que estás enfrentando puede deberse a que el dibujo no se está realizando en el contexto de dispositivo correcto o que no se está manejando adecuadamente el evento de repintado. Aquí hay algunos pasos que puedes seguir para solucionar el problema:

1. Asegúrate de que el control de imagen (Picture Box) esté correctamente inicializado: Verifica que `m_CtrlGrafica1` esté correctamente asociado al control de imagen en tu diálogo.

2. Utiliza el evento `WM_PAINT` para dibujar: En lugar de dibujar directamente en el constructor o en el método de inicialización, deberías realizar el dibujo dentro del manejador del evento `WM_PAINT`. Esto asegura que el dibujo se realice cada vez que el sistema necesita repintar el control.

Aquí tienes un ejemplo de cómo podrías implementar esto:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
void CYourDialog::OnPaint()
{
    CPaintDC dc(this); // Objeto de contexto de dispositivo para el diálogo
    CClientDC clientDC(m_CtrlGrafica1); // Contexto de dispositivo para el Picture Box
 
    // Selecciona la pluma
    CPen *MiPluma = new CPen(estilop, anchop, colorp);
    CPen *PlumaAnterior = clientDC.SelectObject(MiPluma);
 
    // Dibuja la línea
    clientDC.MoveTo(0, 0);
    clientDC.LineTo(5, 5);
 
    // Restaura la pluma anterior
    clientDC.SelectObject(PlumaAnterior);
    delete MiPluma; // Libera la pluma
}

3. Llama a `Invalidate()` en el Picture Box: Cada vez que necesites actualizar el dibujo, asegúrate de llamar a `Invalidate()` en `m_CtrlGrafica1` para forzar el repintado del control.

1
m_CtrlGrafica1.Invalidate();

4. Verifica el estilo del control: Asegúrate de que el control de imagen tenga el estilo adecuado para permitir el dibujo. Podrías necesitar establecer el estilo de la ventana para que no borre el fondo antes de dibujar.

Siguiendo estos pasos, deberías poder ver el dibujo en tu Picture Box dentro del diálogo. Si continúas teniendo problemas, revisa los mensajes de error y asegúrate de que no haya otros factores que estén interfiriendo con el proceso de dibujo.
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