这个VC绘图函数错在哪?
烤火的鱼 2000-02-23 07:26:00 我编写了一个小程序,其中有一段代码是模拟按钮,经简化后如下:
//模拟按钮
void uButton(CDC *pDC,CRect rect)
{
CPen *pNewPen,*pOldPen;
CBrush *pNewBrush=new CBrush;
pNewBrush->CreateSolidBrush(RGB(192,192,192));
pDC->FillRect(rect,pNewBrush);
delete pNewBrush;
pNewPen=new CPen;
pNewPen->CreatePen(PS_SOLID,1,RGB(255,255,255));
pOldPen=pDC->SelectObject(pNewPen);
pDC->MoveTo(rect.left,rect.top );
pDC->LineTo(rect.right-1,rect.top);
pDC->MoveTo(rect.left,rect.top );
pDC->LineTo(rect.left,rect.bottom-1);
delete pNewPen;
//以下代码与上面相同,只是颜色和坐标变了
pNewPen=new CPen;
pNewPen->CreatePen(PS_SOLID,1,RGB(0,0,0));
pDC->SelectObject(pNewPen);
pDC->MoveTo(rect.right,rect.top);
pDC->LineTo(rect.right,rect.bottom);
pDC->MoveTo(rect.left,rect.bottom);
pDC->LineTo(rect.right,rect.bottom);
delete pNewPen;
pNewPen=new CPen;
pNewPen->CreatePen(PS_SOLID,1,RGB(128,128,128));
pDC->SelectObject(pNewPen);
pDC->MoveTo(rect.right-1,rect.top+1);
pDC->LineTo(rect.right-1,rect.bottom-1);
pDC->MoveTo(rect.left+1,rect.bottom-1);
pDC->LineTo(rect.right-1,rect.bottom-1);
delete pNewPen;
pDC->SelectObject(pOldPen);
}
为了测试,我在OnKeyDown()事件中写了如下代码:
{
CDC *pDC=GetDC();
CRect rect;
rect.left=0;
rect.right=100;
rect.top=0;
rect.bottom=70;
uButton(pDC,rect);
//ReleaseDC(pDC);
}
如果你大量调用uButton()函数,如按住回车键不动,过一会儿,图案就变了,再过一会儿就死机了,我实在不知程序错在哪儿,望各为大虾吝指教。