MFC画笔作用域的问题

 今天发现了程序中的一个BUG。功能是在鼠标经过图形时,对图形进行加粗重绘。默认使用白色画刷。为防止白色背景下看不清,在白色背景下改用黑色画刷。代码如下

CPen* pOldPen;
if (pDC->GetBkColor() == RGB(255,255,255))
{
   CPen black(PS_SOLID,1,RGB(0,0,0));
   pOldPen=pDC->SelectObject(&black);

 else
{
   CPen white(PS_SOLID,1,RGB(255,255,255));
   pOldPen=pDC->SelectObject(&white);
}

……

pDC->SelectObject(pOldPen);

结果发现,该段代码下绘制的重绘线并非设定颜色。经排查,问题出现在画笔资源选择上,画笔无法在{}作用域外起到作用。

正确的代码如下:

CPen* pOldPen;
CPen black(PS_SOLID,1,RGB(0,0,0));
CPen white(PS_SOLID,1,RGB(255,255,255));
if (pDC->GetBkColor() == RGB(255,255,255))
   pOldPen=pDC->SelectObject(&black);
else
   pOldPen=pDC->SelectObject(&white);

……
pDC->SelectObject(pOldPen);   //恢复画笔

posted on 2015-09-18 15:09  经年q  阅读(244)  评论(0编辑  收藏  举报

导航