帮我查查内存泄漏(应该是资源泄漏)
CBEMA 2008-05-08 03:11:25 void CExButton::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{
// TODO: Add your code to draw the specified item
CDC*pDC;
pDC = CDC::FromHandle(lpDrawItemStruct->hDC);
UINT state = lpDrawItemStruct->itemState;
CRect leftRect, rightRect,Rect,focusRect; //将控件分成两个区域,显示两种颜色
leftRect.CopyRect(&lpDrawItemStruct->rcItem);//将控件的区域复制给它
rightRect.CopyRect(&lpDrawItemStruct->rcItem);//将控件的区域复制给它
focusRect.CopyRect(&lpDrawItemStruct->rcItem);//将控件的区域复制给它
Rect.CopyRect(&lpDrawItemStruct->rcItem);//将控件的区域复制给它
leftRect.right = (leftRect.right+leftRect.left)/2;//重新设置控件的左区域的右侧位置
rightRect.left = leftRect.right;//重新设置控件的右区域的左侧位置
//设置虚线框
focusRect.left +=2;
focusRect.right -=2;
focusRect.top +=2;
focusRect.bottom -=2;
//按钮标题
TCHAR buffer[512];
GetWindowText(buffer,512);
//绘制按钮
DrawFilledRect(pDC, leftRect, GetBGColor_left());
DrawFilledRect(pDC, rightRect, GetBGColor_right());
DrawFrame(pDC,Rect);
//如果按纽处于选中状态则在其上绘制选中虚线框
if(state&ODS_FOCUS)
{
DrawFocusRect(lpDrawItemStruct->hDC,(LPRECT)&focusRect);
}
DrawButtonText(pDC,Rect,buffer);//绘制按钮上的文本
ReleaseDC(pDC);
}
void CExButton::DrawFilledRect(CDC *DC, CRect R, COLORREF color)
{
B.CreateSolidBrush(color);
DC->FillRect(R,&B);
B.DeleteObject();
}
COLORREF CExButton::GetBGColor_left()
{
return m_leftBG;
}
COLORREF CExButton::GetBGColor_right()
{
return m_rightBG;
}
void CExButton::DrawFrame(CDC *DC, CRect R)
{
int nLeft = R.left;
int nTop = R.top;
int nBottom = R.bottom;
int nRight = R.right-1;
pen.CreatePen(PS_SOLID,1,RGB(0,0,255));//创建黑色画笔
::SelectObject(DC->GetSafeHdc(),pen);//将画笔选入设备
DC->SetBkMode(TRANSPARENT);
//左边竖线
DC->MoveTo(nLeft,nTop);
DC->LineTo(nLeft,nTop);
DC->LineTo(nLeft,nBottom);
//右边竖线
DC->MoveTo(nRight,nTop);
DC->LineTo(nRight,nTop);
DC->LineTo(nRight,nBottom);
//上边横线
DC->MoveTo(nRight,nTop);
DC->LineTo(nRight,nTop);
DC->LineTo(nLeft,nTop);
//下边横线
DC->MoveTo(nRight,nBottom);
DC->LineTo(nRight,nBottom);
DC->LineTo(nLeft,nBottom);
pen.DeleteObject();
}
void CExButton::DrawButtonText(CDC *DC, CRect R, const TCHAR *Buf)
{
DC->SetBkMode(TRANSPARENT);
DC->DrawText(Buf,lstrlen(Buf),R,DT_CENTER|DT_VCENTER|DT_SINGLELINE);
}
void CExButton::SetBGColor(COLORREF color_left, COLORREF color_Right)
{
m_rightBG = color_Right;
m_leftBG = color_left;
Invalidate();
}
void CExButton::PreSubclassWindow()
{
// Add BS_OWNERDRAW style
SetButtonStyle(GetButtonStyle() | BS_OWNERDRAW);
CButton::PreSubclassWindow();
} // End of PreSubclassWindow