我自己派生了一个状态栏类,然后在在DrawItem()函数中通过双缓冲绘制文字或设置背景颜色。可什么运行起来显示状态栏上相关的位置是黑呼呼一片,显然出现了一些问题,请问,我的问题究竟出在哪呢?
void CStatusBarXP::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{
CDC dc;
dc.Attach(lpDrawItemStruct->hDC);
CRect rect(&lpDrawItemStruct->rcItem);
CBrush brush(RGB(50, 50, 50));
CDC memoDC;
CBitmap m_bitmap,*oldBitmap;
switch(lpDrawItemStruct->itemID)
{
case 0: //状态栏第一栏
dc.FillRect(rect, &brush);
dc.SetTextColor(G_NORMALTEXT);
rect.top += 2;
dc.DrawText(m_strPanelFir, rect, DT_CENTER);
break;
case 1: //状态栏第二栏
if( memoDC.CreateCompatibleDC(&dc) )
{
if( m_bitmap.CreateCompatibleBitmap(&dc,rect.Width(),rect.Height()) )
{
oldBitmap=memoDC.SelectObject(&m_bitmap);
memoDC.FillRect(rect, &brush);
memoDC.SetBkMode(TRANSPARENT);
memoDC.SetTextColor(RGB(50, 50, 50));
rect.top += 2;
memoDC.DrawText(m_strPanelSec, rect, DT_CENTER);
dc.BitBlt(rect.left,rect.top,rect.Width(),rect.Height(),&memoDC,0,0,SRCCOPY);
memoDC.SelectObject(oldBitmap);
}
}
break;
}
memoDC.DeleteDC();
m_bitmap.DeleteObject();
dc.Detach();
}