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

不是在Ondraw中画的!当画面重绘(调整换免得大小,或别其他窗口覆盖)时,原来的图就没了!还有,有没有画圆和椭圆的代码?我画圆时,由大变小时,大圆的痕迹还在,画椭圆时外... 不是在Ondraw中画的!当画面重绘(调整换免得大小,或别其他窗口覆盖)时,原来的图就没了!
还有,有没有画圆和椭圆的代码?我画圆时,由大变小时,大圆的痕迹还在,画椭圆时外面还会有虚线的圆!
展开
 我来答
csglb1110
推荐于2016-05-05
知道答主
回答量:10
采纳率:0%
帮助的人:0
展开全部
将绘制的图形保存起来,在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()函数进行重绘
zqq_920
2012-10-16
知道答主
回答量:6
采纳率:0%
帮助的人:9220
展开全部
一楼代码在CShape *shape=new CShape(pt1,pt2);语句下需要添加语句m_ptrArray.Add(shape);
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
风轻云度
2008-05-30 · TA获得超过1423个赞
知道大有可为答主
回答量:1835
采纳率:0%
帮助的人:0
展开全部
改为在OnDraw中或是OnPaint中画。
可以用CDC的Ellapse画圆。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友47445ebea
2008-05-31 · TA获得超过479个赞
知道小有建树答主
回答量:1403
采纳率:0%
帮助的人:0
展开全部
先搞定那把刷子
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式