GDI作图的问题

vcfan_z 2002-05-14 05:57:40
我在一个窗口中画一些东西,同时,背景需要充满由一系列虚线所组成的网格(作标线用),网格的密度为每20象素一根线,纵横一样,窗口大小一般在500x500左右。问题是,一旦画这样的网格,前面画的东西刷新时很慢。请问,有什么好方法可以解决这个问题?
...全文
44 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
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,重载那个重画背景的函数,然后,我看看……:)

16,548

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • AIGC Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

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

试试用AI创作助手写篇文章吧