VC++画图程序中,界面重绘后,原来的图没了怎么办?
不是在Ondraw中画的!当画面重绘(调整换免得大小,或别其他窗口覆盖)时,原来的图就没了!还有,有没有画圆和椭圆的代码?我画圆时,由大变小时,大圆的痕迹还在,画椭圆时外...
不是在Ondraw中画的!当画面重绘(调整换免得大小,或别其他窗口覆盖)时,原来的图就没了!
还有,有没有画圆和椭圆的代码?我画圆时,由大变小时,大圆的痕迹还在,画椭圆时外面还会有虚线的圆! 展开
还有,有没有画圆和椭圆的代码?我画圆时,由大变小时,大圆的痕迹还在,画椭圆时外面还会有虚线的圆! 展开
4个回答
展开全部
将绘制的图形保存起来,在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()函数进行重绘
在窗口需要刷新(窗口缩放或被遮盖)时,程序会调用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()函数进行重绘
展开全部
一楼代码在CShape *shape=new CShape(pt1,pt2);语句下需要添加语句m_ptrArray.Add(shape);
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
改为在OnDraw中或是OnPaint中画。
可以用CDC的Ellapse画圆。
可以用CDC的Ellapse画圆。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
先搞定那把刷子
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询