Samuel Gili
May 28th, 1999, 08:14 AM
Hello:
I have a custom status bar in a CFormView. When I drag another window over it, the status bar is not completely repainted. This is the code of DrawItem function:
void CNodoBarraEstado::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{
CBitmap* pbmOld;
CBitmap bmConectado;
CBitmap bmAlarma;
CRect rect,rectClip;
CDC dc,dcMem;
CIctasView* pView;
switch(lpDrawItemStruct->itemID)
{
case 0: // Pane 0. Literal de conexion
dc.Attach(lpDrawItemStruct->hDC);
rect = CRect(&lpDrawItemStruct->rcItem);
dc.SetBkMode(TRANSPARENT);
pView = (CIctasView*)(GetParentFrame()->GetActiveView());
if (pView->m_pDoc->m_pNodo->m_pN7->EstadoN7() >= N7_CONECTANDO_APL)
dc.SetTextColor(COLOR_AZUL_CLARO);
else
dc.SetTextColor(COLOR_NEGRO);
dc.TextOut(rect.left+4,rect.top+2,m_csTorreOsi);
dc.Detach();
return;
case 1: // Pane 1. Bitmap de alarmas
dc.Attach(lpDrawItemStruct->hDC);
rect = CRect(&lpDrawItemStruct->rcItem);
if (m_byAlarma != EST_NO_ALARMAS)
{
switch (m_byAlarma)
{
case EST_ALARMAS_NOAT:
bmAlarma.LoadBitmap("ALARMAE");
break;
case EST_ALARMAS_AT:
bmAlarma.LoadBitmap("ALARMAATE");
break;
default:
bmAlarma.LoadBitmap("ALARMAE");
}
dcMem.CreateCompatibleDC(NULL);
pbmOld = dcMem.SelectObject(&bmAlarma);
dc.BitBlt(rect.left+6,rect.top+1,30,30,&dcMem,0,0,SRCCOPY);
dcMem.SelectObject(pbmOld);
bmAlarma.DeleteObject();
}
dc.Detach();
return;
case 2: // Pane 2. Bitmap de conexion
dc.Attach(lpDrawItemStruct->hDC);
rect = CRect(&lpDrawItemStruct->rcItem);
if (!m_bPuerto)
bmConectado.LoadBitmap("NOPUERTO");
else
if (m_bConexion)
bmConectado.LoadBitmap("CONECTADO");
else
bmConectado.LoadBitmap("DESCONECTADO");
dcMem.CreateCompatibleDC(NULL);
pbmOld = dcMem.SelectObject(&bmConectado);
dc.BitBlt(rect.left+2,rect.top+1,30,30,&dcMem,0,0,SRCCOPY);
dcMem.SelectObject(pbmOld);
bmConectado.DeleteObject();
dc.Detach();
return;
}
CStatusBar::DrawItem(lpDrawItemStruct);
}
I have a custom status bar in a CFormView. When I drag another window over it, the status bar is not completely repainted. This is the code of DrawItem function:
void CNodoBarraEstado::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{
CBitmap* pbmOld;
CBitmap bmConectado;
CBitmap bmAlarma;
CRect rect,rectClip;
CDC dc,dcMem;
CIctasView* pView;
switch(lpDrawItemStruct->itemID)
{
case 0: // Pane 0. Literal de conexion
dc.Attach(lpDrawItemStruct->hDC);
rect = CRect(&lpDrawItemStruct->rcItem);
dc.SetBkMode(TRANSPARENT);
pView = (CIctasView*)(GetParentFrame()->GetActiveView());
if (pView->m_pDoc->m_pNodo->m_pN7->EstadoN7() >= N7_CONECTANDO_APL)
dc.SetTextColor(COLOR_AZUL_CLARO);
else
dc.SetTextColor(COLOR_NEGRO);
dc.TextOut(rect.left+4,rect.top+2,m_csTorreOsi);
dc.Detach();
return;
case 1: // Pane 1. Bitmap de alarmas
dc.Attach(lpDrawItemStruct->hDC);
rect = CRect(&lpDrawItemStruct->rcItem);
if (m_byAlarma != EST_NO_ALARMAS)
{
switch (m_byAlarma)
{
case EST_ALARMAS_NOAT:
bmAlarma.LoadBitmap("ALARMAE");
break;
case EST_ALARMAS_AT:
bmAlarma.LoadBitmap("ALARMAATE");
break;
default:
bmAlarma.LoadBitmap("ALARMAE");
}
dcMem.CreateCompatibleDC(NULL);
pbmOld = dcMem.SelectObject(&bmAlarma);
dc.BitBlt(rect.left+6,rect.top+1,30,30,&dcMem,0,0,SRCCOPY);
dcMem.SelectObject(pbmOld);
bmAlarma.DeleteObject();
}
dc.Detach();
return;
case 2: // Pane 2. Bitmap de conexion
dc.Attach(lpDrawItemStruct->hDC);
rect = CRect(&lpDrawItemStruct->rcItem);
if (!m_bPuerto)
bmConectado.LoadBitmap("NOPUERTO");
else
if (m_bConexion)
bmConectado.LoadBitmap("CONECTADO");
else
bmConectado.LoadBitmap("DESCONECTADO");
dcMem.CreateCompatibleDC(NULL);
pbmOld = dcMem.SelectObject(&bmConectado);
dc.BitBlt(rect.left+2,rect.top+1,30,30,&dcMem,0,0,SRCCOPY);
dcMem.SelectObject(pbmOld);
bmConectado.DeleteObject();
dc.Detach();
return;
}
CStatusBar::DrawItem(lpDrawItemStruct);
}