创建成一个网格BRUSH,重载那个重画背景的函数,然后,我看看……:)

解决方案 »

  1.   

    xt_jat(桑巴) 的方法很容易出现错位,即一拖动滚动条时可能格子就对不齐了建议采用豆豆的方法再加上准确判断要更新的区域,只更新该区域。方法:建立一个Compatible内存DC,创建一个CBitmap,把此bitmap先入DC,在此bitmap上画图,用BitBlt转到View的DC上。可以参见MFC Samples之DrawCli
      

  2.   

    还有,在允许的情况下Invalidate的参数尽量用FALSE
      

  3.   

    用局部刷新InvalidateRect等应该能解决部分问题。刷新时很慢应该是重画网格引起的,如果不需重画网格,可以设置标志,刷新时不重画网格即可。
      

  4.   

    先谢谢大家的热心回答.
    opentuxedo说得没错,网格BRUSH的方法我试过,是有问题的.
    采用内存DC的做法,想到了,没有尝试,因为据说这样做只能避免闪烁,不能提高效率(想象好像是这样),回头去试一试.
      

  5.   

    试了DrawCli的例子,把其中的DrawGrid作了修改:网格线密度增加,此时效率没有多大影响;然后,画虚线的画笔风格增加PS_GEOMETRIC,此时就很慢了.而这种风格在我的程序里是必须的,否则画出的虚线不能满足要求.
    看来这个问题还不好办.
      

  6.   

    一旦设置画笔PS_GEOMETRIC,画线是慢很多。
    我的一个作图程序也需要画背景网格,最后是使用了一种变通的方法:
    画实线,然后用背景颜色的线条去分割 (注意,使用45度的线条效果很好,try),最后作一些修补,使线条类型稍微多一点。
    当然,这种方法无法全部满足同时多种类型虚线的要求,但比使用PS_GEOMETRIC风格的画笔效率要高--效果和效率,鱼和熊掌也。