vc++中,做的一个画图的小程序,怎么在窗口重画后使图像不消失?绘制代码不在ondraw()函数里面。

因为是对不同的按钮响应,绘制不同的图形,所以绘制代码都在相应的按钮响应函数里,不在OnPaint()里。我想的是在窗口重画之前,先保存客户区的图像,重画之后再贴回来。但是... 因为是对不同的按钮响应,绘制不同的图形,所以绘制代码都在相应的按钮响应函数里,不在OnPaint()里。
我想的是在窗口重画之前,先保存客户区的图像,重画之后再贴回来。但是应该怎么做呢?
展开
 我来答
百度网友b41cafd
2011-04-13 · 超过20用户采纳过TA的回答
知道答主
回答量:60
采纳率:0%
帮助的人:41.7万
展开全部
一般MFC中 OnDraw(CDC*pDC) 这个函数 后面都有 CDC*pDC
HDC就是最原始的 DC 句柄 ,在MFC中,为了将API封装成一个类来操作,因此多出来了一个CDC
所以你说的那块绘图的区域 就是定义一块内存!

双缓充技术 就是开2个DC
CDC MemDC1;
CDC MemDC2;
MemDC1.MoveTo(20,420);
MemDC1.LineTo(425,420);//这是画到第一个
MemDC2.MoveTo(20,420);
MemDC2.LineTo(425,420);//这是画到第二个
pDC->BitBlt(x,y,450,460,&MemDC1,0,0,SRCCOPY);把第一块内存画到显示上去
pDC->BitBlt(x,y,450,460,&MemDC2,0,0,SRCCOPY);把第二块内存画到显示上去
上面就是最简单的 双缓冲 例子
如果觉得不详细,你可以看看一楼的传送门,或者直接网上找个例子看看
ExcaliburZ
2011-04-13 · TA获得超过1102个赞
知道小有建树答主
回答量:750
采纳率:0%
帮助的人:805万
展开全部
使用双缓冲或多缓冲机制吧.
楼主可以搜索一下相关的教程.在这里一句话说不清楚

给个超级无敌传送门:
http://www.vckbase.com/document/viewdoc/?id=1612
追问
照着写的:
CBitmap m_bmp;
m_bmp.CreateCompatibleBitmap(&m_dcMemory,rect.Width(),rect.Height());
::SelectObject(m_dcMemory.GetSafeHdc(),m_bmp);
CPen pen(2,2,RGB(255,0,0));
::SelectObject(m_dcMemory.GetSafeHdc(),pen);
m_dcMemory.MoveTo(0,0);
m_dcMemory.LineTo(200,300);
pDC->BitBlt(0,0,rect.Width(),rect.Height(),&m_dcMemory,0,0,SRCCOPY);
本意是画一条红线,但客户区全是黑的。请问?

参考资料: http://www.vckbase.com/document/viewdoc/?id=1612

本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2011-04-13
展开全部
你使客户区置为无效,也就是要重新刷新整个客户区或者某个具体的客户区域
在按钮的执行函数中的最后添加刷新函数
整个客户区用:void Invalidate( BOOL bErase = TRUE );
具体区域用:void InvalidateRect( LPCRECT lpRect, BOOL bErase = TRUE );
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式