图形重绘

wumeng553 2008-03-31 10:41:45
在OnDraw函数中实现图形的重绘,利用CPtrArray,但是每次刷新后图像所画图形的颜色,全部成了最后一次选择的颜色,
请教哪里出了错误,有什么解决办法吗?



头文件中定义:
CPoint m_ptOrigin;
CPoint m_ptEnd;
UINT m_nDrawType;
COLORREF m_ptclr;


void CGraphicView::OnDraw(CDC* pDC)
{
CGraphicDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);


CClientDC dc(this);
CPen pen(PS_SOLID, m_nLineWidth, m_clr);//m_clr为选择颜色的COLORREF

CBrush *pBrush = CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH));
pDC -> SelectObject(pBrush);


for (int i = 0; i < m_ptrArray.GetSize(); i++)
{
switch(((CGraph*)m_ptrArray.GetAt(i)) -> m_nDrawType)
{
case 1:
pDC -> SelectObject(&pen);
((CGraph*)(m_ptrArray.GetAt(i))) -> m_ptclr;
pDC -> MoveTo(((CGraph*)m_ptrArray.GetAt(i)) -> m_ptOrigin);
pDC -> LineTo(((CGraph*)m_ptrArray.GetAt(i)) -> m_ptEnd);

break;
case 2:
pDC -> SelectObject(&pen);
((CGraph*)(m_ptrArray.GetAt(i))) -> m_ptclr;
pDC -> Rectangle(CRect(((CGraph*)m_ptrArray.GetAt(i)) -> m_ptOrigin,
((CGraph*)m_ptrArray.GetAt(i)) -> m_ptEnd));

break;
case 3:
pDC -> SelectObject(&pen);
((CGraph*)(m_ptrArray.GetAt(i))) -> m_ptclr;
pDC -> Ellipse(CRect(((CGraph*)m_ptrArray.GetAt(i)) -> m_ptOrigin,
((CGraph*)m_ptrArray.GetAt(i)) -> m_ptEnd));
break;
}
}
}
...全文
97 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaoQ008 2008-03-31
  • 打赏
  • 举报
回复
楼上对的
pDC -> SelectObject(&pen);
返回以前的画笔
SelectObject(&Oldpen);
将以前的画笔重新选近DC
搂主应该理解吧
也可以在for循环前面
CPen Oldpen=pDC -> SelectObject(&pen);
在for循环后面
pDC -> SelectObject(&Oldpen);
hanjinchidm 2008-03-31
  • 打赏
  • 举报
回复
你每一个Case语句都变成这种形式试试:
CPen Oldpen=pDC -> SelectObject(&pen);
((CGraph*)(m_ptrArray.GetAt(i))) -> m_ptclr;
pDC -> MoveTo(((CGraph*)m_ptrArray.GetAt(i)) -> m_ptOrigin);
pDC -> LineTo(((CGraph*)m_ptrArray.GetAt(i)) -> m_ptEnd);
pDC -> SelectObject(&Oldpen);

16,548

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • AIGC Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧