hur.cn - 华软网

 热门搜索

关于孙鑫《VC++深入详解》图形重绘的问题

  作者:未知    来源:网络    更新时间:2011/7/13
   我按照教材第十一章的做法,创建兼容DC后,但是不确定该把这兼容DC的画图代码写在CMyview1::OnLButtonUp()里还是CMyview1::OnDraw()里?
    我现在的做法是在CMyview1::OnDraw()里写一个原来的画图代码,再在CMyview1::OnLButtonUp()里写一段m_dcCompatible.CreateCompatibleDC(&dc);他们两个函数的代码基本差不多,
只是CMyview1::OnDraw()里是pDC->MoveTo(gridRect.left,gridRect.bottom);
而CMyview1::OnLButtonUp()里是m_dcCompatible.MoveTo(gridRect.left,gridRect.bottom);

请问这样有什么问题?而且经我测试后,没有解决重绘的问题...
这样做可以吗?或者有其他 更好的方法吗?谢谢

---华软 网友回答---
绘图的代码最好放在OnDraw函数中~
---华软网友回复---
你好,1楼。我是发帖人,只是我没有分,借的别人的号发的。我想请问把这两个画图的函数即pDC->MoveTo(gridRect.left,gridRect.bottom);和m_dcCompatible.MoveTo(gridRect.left,gridRect.bottom);

都放在OnDraw()里的画,这样可以吗?或者是不是代码太臃肿了?
---华软网友回复---
如果你是在OnDraw中用双缓存,那么响应OnEraseBkgnd,直接return TRUE;完全由OnDraw来绘制背景;或者,将OnDraw中的内容封装成函数,在OnDraw中调用,在OnLButtonUp中也调用,以及在任何需要刷新的地方调用,但不要调用Invalidate
---华软网友回复---
嗯,我也想把它封装成函数。但小弟的MFC水平太菜(惭愧),只知道封成类或者用extern,请问孙鑫的兼容DC和双缓存是同一个概念吗?还有我的原问题那两段绘图代码分别该写在哪里?
---华软网友回复---
双缓存会用到兼容DC
你这个代码显然有些问题,既然双缓存,就不需要写出pDC->MoveTo这样的语句,只需要在内存DC中进行绘制,然后BitBlt到pDC
封装函数多简单啊,将你OnDraw中所有的代码另外建一个视图类的函数就可以了阿。参数类型也只需要是CDC *pDC
---华软网友回复---
不需要写pDC->MoveTo?可是这个语句是一开始要画的图啊,(就是程序运行后马上我们能看到的效果)而m_dcCompatible.MoveTo实在内存中的(而它的作用则是为了解决重绘的,即OnLButtonUp这样的消息发生后,你说的它就BitBlt到pDC
)这应该是两个步骤或两回事哦(我不确定哈,自己觉得的),请问我的理解对吗?谢谢“快乐鹦鹉”了,谢谢回答!
---华软网友回复---
你对双缓存还很不理解,用文字描述太麻烦,你还是自己搜索下双缓存的解释吧。不是用兼容DC就是写到内存中就拉倒了,写到内存中后,接着就要BitBlt到pDC进行显示的。
---华软网友回复---
同步学习一下~~~!
---华软网友回复---
在弱弱的问下,我有点明白双缓存的意思了。但是我还是有一点不太明白,它能解决屏幕闪的问题,但是它能解决图形重绘么?
---华软网友回复---
能。。。。。。。
---华软网友回复---
谢谢各位      
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。