![]() |
![]() |
|
|
|
|
|
Muchas veces necesitamos agrupar controles de diversos tipos, para eso tenemos disponible el control Group, pero a veces solo necesitamos un separador de controles simple y sencillo.
La clase CLineStatic basada en CStatic dibuja además del texto una linea separadora dentro del ambito del control, en realidad es muy sencillo.
Para poder utilizar esta clase primero debemos incluir los archivos de codigo fuente de la clase CLineStatic: linestatic.h y linestatic.cpp al proyecto. Luego instanciar la clase con los controles static deseados en los formularios y listo.

Vista diseño del control
La imagen anterior muestra un control static en tiempo de diseño, al instanciar este control con la clase CLineStatic obtendremos el siguiente resultado en en tiempo de ejecusión:

Vista del control en tiempo de ejecucion
El control es una alternativa para ayudar a ordenar mejor nuestros formularios. La imagen siguiente muestra el uso de control en un formulario de datos.

Ejemplo de colocación
La función principal de la clase es DrawControl que diguja todo el control, recibe como parametros un puntero al dispositivo del contexto para dibujar y el area donde se va a dibujar el control. Se llama a esta funcion en el envento OnPaint
void CLineStatic::OnPaint()
{
CPaintDC dc(this); // device context for painting
CRect rect;
GetClientRect(&rect);
DrawControl(&dc, rect);
}
void CLineStatic::DrawControl(CDC *pDC, CRect &m_rect)
{
CPoint a,b;
CPen pen1,pen2;
CString strText;
pen1.CreatePen(PS_SOLID,1,::GetSysColor(COLOR_BTNSHADOW));
pen2.CreatePen(PS_SOLID,1,::GetSysColor(COLOR_BTNHIGHLIGHT));
pDC->SetBkColor(::GetSysColor(COLOR_BTNFACE));
CPen *pOldPen = pDC->SelectObject (&pen1);
pDC->MoveTo(m_rect.left ,m_rect.Height()/2);
pDC->LineTo(m_rect.right ,m_rect.Height()/2);
pDC->SelectObject (&pen2);
pDC->MoveTo(m_rect.left ,m_rect.Height()/2+1);
pDC->LineTo(m_rect.right ,m_rect.Height()/2+1);
GetWindowText(strText);
if(!strText.IsEmpty())
{
CFont *oldFont = pDC->SelectObject(&m_font);
a = CPoint(m_rect.left + 10 ,m_rect.top);
CSize fSize = pDC->GetTextExtent(strText);
pDC->DrawState(a,fSize,strText,
IsWindowEnabled()?DSS_NORMAL:DSS_DISABLED,
TRUE, 0,(HBRUSH)NULL);
pDC->SelectObject(&oldFont);
}
pen1.DeleteObject();
pen2.DeleteObject();
pDC->SelectObject(pOldPen);
}
20 Nov 2003 - 1.0 Versión inicial.
![]() |
![]() |
|||
|
||||
![]() |
![]() |