Separador de controles para formularios MFC

Por:ivancp,enviado 20 Sep 2004
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.hy linestatic.cpp al proyecto. Luego crear una instancia de la clase con los controles static deseados en los formularios y listo.

linestatic1.gif
Vista diseño del separador de controles


La imagen anterior muestra un control static en tiempo de diseño, al crear una instancia este control con la clase CLineStatic obtendremos el siguiente resultado en en tiempo de ejecución:

linestatic2.gif
Vista del control en tiempo de ejecución


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.

linestatic0.gif
Ejemplo de como puede usarse en un dialogo MFC

Código fuente.

La función principal de la clase es DrawControl que dibuja todo el control, recibe como parámetros un puntero al dispositivo del contexto para dibujar y el área donde se va a dibujar el control. Se llama a esta función en el evento OnPaint

Code: Seleccionar todo
  1. void CLineStatic::OnPaint()

  2. {

  3.     CPaintDC dc(this); // device context for painting

  4.    

  5.     CRect rect;

  6.     GetClientRect(&rect);

  7.     DrawControl(&dc, rect);    

  8. }

  9.  

  10. void  CLineStatic::DrawControl(CDC *pDC, CRect &m_rect)

  11. {

  12.     CPoint a,b;

  13.     CPen pen1,pen2;

  14.     CString strText;

  15.  

  16.     pen1.CreatePen(PS_SOLID,1,::GetSysColor(COLOR_BTNSHADOW));

  17.     pen2.CreatePen(PS_SOLID,1,::GetSysColor(COLOR_BTNHIGHLIGHT));

  18.    

  19.     pDC->SetBkColor(::GetSysColor(COLOR_BTNFACE));

  20.  

  21.     CPen *pOldPen = pDC->SelectObject (&pen1);

  22.    

  23.     pDC->MoveTo(m_rect.left  ,m_rect.Height()/2);

  24.     pDC->LineTo(m_rect.right ,m_rect.Height()/2);

  25.  

  26.     pDC->SelectObject (&pen2);

  27.  

  28.     pDC->MoveTo(m_rect.left  ,m_rect.Height()/2+1);

  29.     pDC->LineTo(m_rect.right ,m_rect.Height()/2+1);

  30.  

  31.    

  32.     GetWindowText(strText);

  33.     if(!strText.IsEmpty())

  34.     {

  35.         CFont *oldFont = pDC->SelectObject(&m_font);

  36.         a = CPoint(m_rect.left + 10 ,m_rect.top);

  37.         CSize fSize = pDC->GetTextExtent(strText);

  38.         pDC->DrawState(a,fSize,strText,

  39.               IsWindowEnabled()?DSS_NORMAL:DSS_DISABLED,

  40.               TRUE, 0,(HBRUSH)NULL);

  41.         pDC->SelectObject(&oldFont);

  42.     }

  43.  

  44.     pen1.DeleteObject();

  45.     pen2.DeleteObject();    

  46.  

  47.     pDC->SelectObject(pOldPen);

  48. }


Historia



  • 20 Nov 2003 - 1.0 Versión inicial.
Tags: MFC,controles

Archivos Adjuntos

Otros Artículos en esta sección

¿Alguna duda? Sientete libre de hacer tus pruntas en nuestro:
foro deVisual C++ »