Usted no esta registrado, haga click aqui para registrarse!
 Inicio   Artículos   Recursos   Foros 
 

Iniciar sesión

¿No estas registrado?
Registrate en Latindevelopers.com!

 

















Separador tipo linea en Visual C++

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.

Modo de uso.

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
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
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
Ejemplo de colocación

Código fuente.

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);
}

Historia

20 Nov 2003 - 1.0 Versión inicial.

 

Descargas

Acerca del Author

Nombre de usuario: latindeveloper
Blog/URL:
Fecha de envío: 2004-09-20
Ultima Actualización:
Visualizaciones: 3783
Nedstat Basic - Web site estadisticas gratuito
El contador para sitios web particulares