中易网

VC++画图程序中,界面重绘后,原来的图没了怎么办?

答案:4  悬赏:0  
解决时间 2021-01-11 03:20
  • 提问者网友:未信
  • 2021-01-10 12:01
VC++画图程序中,界面重绘后,原来的图没了怎么办?
最佳答案
  • 二级知识专家网友:孤老序
  • 2021-01-10 12:56
将绘制的图形保存起来,在OnDraw(CDC *pDC)函数中重画.
在窗口需要刷新(窗口缩放或被遮盖)时,程序会调用OnDraw 函数进行重绘.如果程序中添加了OnPaint消息处理函数,程序将不再调用OnDraw函数.
可以在OnDraw或OnPaint函数中将图形重画.
例如:
在鼠标按下时画一个椭圆
通过向导方式添加一个新的类,用于保存图形
class CShape:public CObject
{
CPoint ptStart;
CPoint ptEnd;
}
CShape::CShape(CPoint pt1,CPoint pt2)
{
this->ptStart=pt1;
this->ptEnd=pt2;
}
在C_View类中添加一个数组类型的成员变量
CPtrArray m_ptrArray;
在鼠标按下的消息处理函数中画椭圆,并保存到数组中
void CClearView::OnLButtonDown(UINT nFlags, CPoint point)
{
CClientDC dc(this);
CPoint pt1,pt2;
pt1.x=20; pt1.y=20;
pt2.x=200; pt2.y=100;
dc.Ellipse(CRect(pt1,pt2)); //在圆心(110,60)处画 一椭圆,实半轴(200-20)/2,虚半轴(100-20)/2
CShape *shape=new CShape(pt1,pt2);
}
在OnDraw函数中重绘
C_View(CDC *pDC)
{
CPoint pt1,pt2;
pt1=((CShape*)(m_ptrArray.GetAt(0))->ptStart;
pt2=((CShape*)(m_ptrArray.GetAt(0))->ptEnd;
pDC->Ellipse(CRect(pt1,pt2));
}

将图形进行缩放变换时,可以先调用Invalidate()函数使窗口无效来清除窗口,将保存的图形信息修改之后再调用OnDraw()函数进行重绘
全部回答
  • 1楼网友:愁杀梦里人
  • 2021-01-10 15:18
改为在OnDraw中或是OnPaint中画。
可以用CDC的Ellapse画圆。
  • 2楼网友:北城痞子
  • 2021-01-10 13:56
先搞定那把刷子
  • 3楼网友:廢物販賣機
  • 2021-01-10 13:24
一楼代码在CShape *shape=new CShape(pt1,pt2);语句下需要添加语句m_ptrArray.Add(shape);
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息!
大家都在看
推荐信息