如何在onDraw函数中调用InvalidateRect只重绘指定区域的图形,提高效率。求解

解决方案 »

  1.   

    不要在OnDraw中调用InvalidateRect
    InvalidateRect  该函数向指定的窗体添加一个矩形,然后窗口客户区域的这一部分将被重新绘制。
      BOOL InvalidateRect(
      HWND hWnd, // handle of window with changed update region
      CONST RECT *lpRect, // address of rectangle coordinates
      BOOL bErase // erase-background flag
      );
    这不就是这个作用嘛
      

  2.   

    怎么会在OnDraw中调用
    如果要重复绘制可以用时钟消息啊
      

  3.   

    对啊 OnDraw里面就是重绘全部了 在调用InvalidateRect好像没什么意义
      

  4.   

    // following is the fast scrolling //////////////////////////
    CRect rect;
    pDC->GetClipBox (&rect);
    // afxDump << rect << "\n";
    int   h=rect.Height();// clip height
      

  5.   

    onDraw重绘一个表格,表格中有大量的数据,在ondraw中有一段代码,是将鼠标左键按下后拖动选择一个区域,对该区域中的内容修改背景色,而该区域中又分成很多块,是通过循环一个一个改变背景色,但一个单元格上色后系统是否调用ondraw又对整个区域重绘,我想在按下左键后,拖动鼠标,选择多个单元格的同时对单元格的背景色修改有渐变的效果,文件小的时候很流畅,但数据文件多的时候就特别卡了。求高手赐教
      

  6.   

    类似一个word文档,我们左键按下拖动鼠标,会给选中的内容修改背景色,在鼠标拖动的过程中背景色修改给人的影响很柔和,而我的图形在数据量大的时候感觉很迟钝
      

  7.   

    用GetDC获取dc,在这个dc上直接动态的画要改变的地方为了不闪可能会用双缓存,这个你今后考虑吧