• 全部
  • VC综合技术
  • 互联网技术
  • MFC AppLauncher
  • .NET 技术
  • 界面
  • 进程
  • 算法
  • 硬件/系统
  • 数据库
  • VC++技术资源

GDI作图的问题

vcfan_z 2002-05-14 05:57:40
我在一个窗口中画一些东西,同时,背景需要充满由一系列虚线所组成的网格(作标线用),网格的密度为每20象素一根线,纵横一样,窗口大小一般在500x500左右。问题是,一旦画这样的网格,前面画的东西刷新时很慢。请问,有什么好方法可以解决这个问题?
...全文
12 点赞 收藏 12
写回复
12 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
vcfan_z 2002-05-15
试了DrawCli的例子,把其中的DrawGrid作了修改:网格线密度增加,此时效率没有多大影响;然后,画虚线的画笔风格增加PS_GEOMETRIC,此时就很慢了.而这种风格在我的程序里是必须的,否则画出的虚线不能满足要求.
看来这个问题还不好办.
回复
vcfan_z 2002-05-15
谢谢大家!
回复
eastrock 2002-05-15
双缓冲
回复
pcman1990 2002-05-15
一旦设置画笔PS_GEOMETRIC,画线是慢很多。
我的一个作图程序也需要画背景网格,最后是使用了一种变通的方法:
画实线,然后用背景颜色的线条去分割 (注意,使用45度的线条效果很好,try),最后作一些修补,使线条类型稍微多一点。
当然,这种方法无法全部满足同时多种类型虚线的要求,但比使用PS_GEOMETRIC风格的画笔效率要高--效果和效率,鱼和熊掌也。
回复
Hover 2002-05-14
可以使用两个内存DC,一个做为后台缓冲,另一个保存网格.
回复
蒋晟 2002-05-14
去看Drawcli示例(MFC/MSDN)
回复
vcfan_z 2002-05-14
先谢谢大家的热心回答.
opentuxedo说得没错,网格BRUSH的方法我试过,是有问题的.
采用内存DC的做法,想到了,没有尝试,因为据说这样做只能避免闪烁,不能提高效率(想象好像是这样),回头去试一试.
回复
quanxiongwei 2002-05-14
用局部刷新InvalidateRect等应该能解决部分问题。刷新时很慢应该是重画网格引起的,如果不需重画网格,可以设置标志,刷新时不重画网格即可。
回复
opentuxedo 2002-05-14
还有,在允许的情况下Invalidate的参数尽量用FALSE
回复
opentuxedo 2002-05-14
xt_jat(桑巴) 的方法很容易出现错位,即一拖动滚动条时可能格子就对不齐了

建议采用豆豆的方法再加上准确判断要更新的区域,只更新该区域。方法:建立一个Compatible内存DC,创建一个CBitmap,把此bitmap先入DC,在此bitmap上画图,用BitBlt转到View的DC上。可以参见MFC Samples之DrawCli
回复
DouDouBug 2002-05-14
使用虚窗口,即现在内存中画好,然后再拷贝到显示上,速度很快的
回复
xt_jat 2002-05-14
创建成一个网格BRUSH,重载那个重画背景的函数,然后,我看看……:)
回复
相关推荐
发帖
VC/MFC
创建于2007-09-28

1.5w+

社区成员

VC/MFC相关问题讨论
申请成为版主
帖子事件
创建了帖子
2002-05-14 05:57
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……