双缓冲机制实现GDI快速绘图,那么需要创建一个内存设备环境,假设这个内存设备环境的大小是 1024 X 768,那么在这个内存设备环境选入各种 GDI 对象后进行绘图的过程中,如果绘图的位置发生在所设定区域之外,比如说需要在这个1024 X 768的区域之外还需要绘制 500 个点或是矩形,那么实际运行过程当中Windows 会不会真的对这500个点或矩形一一进行绘制?从而占用程序运行时间?谢谢!

解决方案 »

  1.   

    比如:
    CRect rect1(0,0,1024,768);
    CRgn     rgn;
    rgn.CreateRectRgnIndirect(&(rect1)); 
    pDC->SelectClipRgn(&rgn,RGN_COPY);
    //draw something
    pDC->SelectClipRgn(NULL,RGN_COPY);  
    rgn.DeleteObject();自己画的为止在draw something位置!
    画完后,要恢复设备的环境!
      

  2.   

    非常感谢!能否告知一下 SelectClipRgn 的内部工作机制,我怎么觉得这个函数好像还是进行了全部绘制,然后把 CRgn 范围内的的图像通过 copy 或是 xor 一类的方式,就像绘制透明位图那样给取出一部分来。如果是这样的话,那不但不会节省程序运行时间,反而增加了程序运行的计算量。
      

  3.   

    SelectClipRgn 只是对当前设备的画图的范围进行了限制!也就是只画包含在rgn内的,不画外面的!如果你的画图数据量小,没有必要调用;如果数据量大,使用这个能节约不少时间,效果还是比较明显的!