是一个实时滚动的趋势图,如何实现才最有效率呢?只要提出算法就可以了。不知会不会有比我现在的算法效率更高的。注意背景坐标网格是固定的,不随趋势线的滚动而滚动的。有好的解决吗?

解决方案 »

  1.   

    是用两层位图。每次先贴背景。上边一层透明,上边的趋势曲线位图每次左移一点(最左边一个步长的丢掉),然后把最新一个步长的曲线绘上去,然后再贴到背景上。这样需要好多bitblt操作
      

  2.   

    我在CODEGURU找到了一个用C写的示波器控件的例子,好象跟我的方法差不多。
    我的问题的关键是要在趋势图滚动的时候绘图效率要高。还有,原来的旧曲线还要擦除呀。这里用异或笔是不行的,因为这样的话曲线的颜色就不能保证了。
    用VB我以前是用两片picture box来交替滚动的,也就是说用新的picture box把旧的picture box向右顶。完全顶出去后就把它接到图形左边。这样每次滚动只需要重绘新出来的那部分曲线。不过picture box可是是透明的吗?可以透出后边的固定背景吗?
      

  3.   

    是用两层位图。每次先贴背景。上边一层透明,上边的趋势曲线位图每次左移一点(最左边一个步长的丢掉),然后把最新一个步长的曲线绘上去,然后再贴到背景上。这样需要好多bitblt操作这个不应该花太多时间
    另外你可以创建一个16色,或者256色的位图来操作,完全能満足要求
      

  4.   

    http://codeproject.com/docview/graphfx.asp
    CodeProject上本来还有另一个更好的例子的,不过我在那里已经找不到了
    如果你需要的话我可以把代码发给你,曲线图的显示,应该还不错
    我用了显示高速波形图的
      

  5.   

    qrlvls(怜松):请打包后发到 多谢!
    demetry(智者橡木):商用代码比较成熟可是不够好玩。其实只需要知道一些好的思路而已。Coding is only a manual labour, right?
      

  6.   

    ZT
    先调用 ScrollWindow(Ex) 将当前窗口显示整体上移(超出的部分自动被 DC 剪切), 然后计算上移后未覆盖的 rect,调用: 
    InvalidateRect(hWnd, &rect, TRUE);
    UpdateWindow(hWnd);
      

  7.   

    其实你的方法应该不错的!bitblt花的时间应该是最短的,ScrollWindow其实也是用了bitblt
    如过你还要快,请用DDraw
      

  8.   

    还有一个细节提醒大家:为了实现前景透明,必须先在背景上用AND笔贴白底黑曲线,然后用OR笔帖黑底彩色曲线。当然,先用黑底白曲线用OR笔留个白轨迹,然后再用AND笔贴黑底彩色曲线也是一样的。