Visual C++ .NET - Frame con grosor en MFC

 
Vista:

Frame con grosor en MFC

Publicado por Marta (1 intervención) el 08/04/2013 17:54:25
Buenas tardes, estoy haciendo una aplicacion en MFCs y quiero poner un frame a un CRect, pero que tenga un grosor específico. He utilizado un CPen al que se le puede indicar el grosor de línea y he llamado al constructor de CFrameRect con el CRect y el CPen, el problema es no se permite usar CPen para construir el Frame, tiene que utilizarse un CBrush (al que no se le puede indicar grosor).
¿Hay alguna forma de hacer ésto?Quiero que aparezca un marco únicamente, nada de relleno....
Muchas gracias por adelantado.
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

Dibujar un marco con grosor específico en MFC

Publicado por Alejandro (265 intervenciones) el 13/02/2024 18:01:53
Marta, para dibujar un marco alrededor de un `CRect` en MFC (Microsoft Foundation Classes), puedes utilizar el método `FrameRect` de la clase `CDC` (Device Context). Sin embargo, `FrameRect` no admite la especificación directa del grosor del marco.

Una manera de lograr un marco con grosor específico es dibujarlo manualmente utilizando líneas con el grosor deseado. Puedes hacer esto en el método `OnPaint` o en otro lugar donde quieras dibujar el marco. Aquí tienes un ejemplo simple de cómo hacerlo:

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
29
void CMyView::OnPaint()
{
    CPaintDC dc(this); // Contexto de dispositivo para el objeto de vista
    CRect rectClient;
    GetClientRect(&rectClient);
 
    // Dibuja un marco alrededor del área del cliente con un grosor de 3 píxeles
    DrawThickFrame(&dc, rectClient, 3);
}
 
void CMyView::DrawThickFrame(CDC* pDC, CRect rect, int thickness)
{
    CPen pen(PS_SOLID, thickness, RGB(0, 0, 0)); // Grosor y color del marco
    CPen* pOldPen = pDC->SelectObject(&pen);
 
    // Dibuja las líneas horizontales superior e inferior
    pDC->MoveTo(rect.left, rect.top);
    pDC->LineTo(rect.right, rect.top);
    pDC->MoveTo(rect.left, rect.bottom - 1);
    pDC->LineTo(rect.right, rect.bottom - 1);
 
    // Dibuja las líneas verticales izquierda y derecha
    pDC->MoveTo(rect.left, rect.top);
    pDC->LineTo(rect.left, rect.bottom - 1);
    pDC->MoveTo(rect.right - 1, rect.top);
    pDC->LineTo(rect.right - 1, rect.bottom - 1);
 
    pDC->SelectObject(pOldPen);
}

Este código crea un grosor de marco específico utilizando líneas individuales y la clase `CPen`. Puedes ajustar el grosor y el color según tus necesidades. Luego, llama a `DrawThickFrame` desde el método `OnPaint` para dibujar el marco en tu vista.
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