我做了一个扫雷的程序。
  在画图的问题上碰到一点问题:  在处理WM_PAINT,也就是在窗口要被重画时,我为了简单
  所以处理时重头到尾都重画了。(没用directx)  后来发现重画窗口时,很慢,上面的图感觉就像是一点一点画的。
  而且当有其他的窗口遮住扫雷的窗口的时候,再移开时,那个要画的区域很久才能画
 (因为要重头开始画)
  我现在想只处理那块遮住的部分,不知有什么函数与方法,请教了。  顺便问一下,有什么方法可提高画图的速度
  (我是采用贴位图的方法,把图贴上去的,用bitblt)

解决方案 »

  1.   

    在内存中画好再贴到图上!例:处理WM_PAINTCDC *pDC=GetDC();
    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();
      

  2.   

    贴图在
    BitBlt语句前加memdc.SelectObject(m_NomalBitmap);
    NomalBitmap为CBitmap类型!
      

  3.   

    同意 vc_love(小时候) ,在内存中画图,使用Memory DC.当需要重画窗口时,会收到WM_Paint消息,你就在这里
    BitBlt(dc,..., m_memDC,...),
    把整个图从内存画到屏幕。而你要改变图的内容时,就画在m_memDC里。这样的话,你贴位图的次数就大大减少了。速度也上来了。至于遮盖的部分,不考虑也没有问题,windows会知道何时通知你重画,自动调用OnPaint()函数。
    你可以用GetUpdateRect()获得需要更新的区域。
      

  4.   

    不过我是没有用mfc,
    如果直接用api的话因该怎么处理呀?