我做了一个扫雷的程序。
在画图的问题上碰到一点问题: 在处理WM_PAINT,也就是在窗口要被重画时,我为了简单
所以处理时重头到尾都重画了。(没用directx) 后来发现重画窗口时,很慢,上面的图感觉就像是一点一点画的。
而且当有其他的窗口遮住扫雷的窗口的时候,再移开时,那个要画的区域很久才能画
(因为要重头开始画)
我现在想只处理那块遮住的部分,不知有什么函数与方法,请教了。 顺便问一下,有什么方法可提高画图的速度
(我是采用贴位图的方法,把图贴上去的,用bitblt)
在画图的问题上碰到一点问题: 在处理WM_PAINT,也就是在窗口要被重画时,我为了简单
所以处理时重头到尾都重画了。(没用directx) 后来发现重画窗口时,很慢,上面的图感觉就像是一点一点画的。
而且当有其他的窗口遮住扫雷的窗口的时候,再移开时,那个要画的区域很久才能画
(因为要重头开始画)
我现在想只处理那块遮住的部分,不知有什么函数与方法,请教了。 顺便问一下,有什么方法可提高画图的速度
(我是采用贴位图的方法,把图贴上去的,用bitblt)
解决方案 »
- 纠缠了我1天的链接错误:LIBCD.lib(crt0.obj) : error LNK2001: unresolved external symbol _mai
- 两个进程的窗口A,B,如何让B产生时候显示在A的上头?
- 新手问题:怎样添加位图资源??
- 弱弱的问!
- 如何设置系统时间
- 文档和视图结构是什么意思?
- 不显示删除回复显示所有回复显示星级回复显示得分回复 为啥在另一台电脑上会出现“Failed to create empty document”
- DLL 的及菜送分问题。。来拿吧 :))
- 真正的程序员用vc,这对么?如果学过c,那么应该学vb呢还是vc++呢?
- 急!!!!建立虚拟目录!!!!!
- 怎样枚举进程里面所有的线程,并得到他们CPU的占用程度???
- 散分了,好久没来,今天发现自己在VC区的专家分竟然是2888 分
CRect rc;
GetClientRect(&rc);
CDC memdc;
if(!memdc.CreateCompatibleDC(pDC))return;
memdc.MoveTo(0,0);
memdc.LineTo(200,200);
pDC->StretchBlt(rc.left,rc.top,rc.Width(),rc.Height(),&memdc,0,0,SRCCOPY);
memdc.DeleteDC();
BitBlt语句前加memdc.SelectObject(m_NomalBitmap);
NomalBitmap为CBitmap类型!
BitBlt(dc,..., m_memDC,...),
把整个图从内存画到屏幕。而你要改变图的内容时,就画在m_memDC里。这样的话,你贴位图的次数就大大减少了。速度也上来了。至于遮盖的部分,不考虑也没有问题,windows会知道何时通知你重画,自动调用OnPaint()函数。
你可以用GetUpdateRect()获得需要更新的区域。
如果直接用api的话因该怎么处理呀?