0420004C  00 00 FF 00 00 00  ......
04200052  FF 00 00 00 FF 00  ......
04200058  00 00 FF 00 00 00  ......
0420005E  FF 00 00 00 FF 00  ......
04200064  00 00 FF 00 00 00  ......
0420006A  FF 00 00 00 FF 00  ......
04200070  00 00 FF 00 00 00  ......
04200076  FF 00 00 00 FF 00  ......
0420007C  00 00 FF 00 00 00  ......
04200082  FF 00 00 00 FF 00  ......
04200088  00 00 FF 00 00 00  ......
0420008E  FF 00 00 00 FF 00  ......
04200094  00 00 FF 00 00 00  ......
0420009A  FF 00 00 00 FF 00  ......
042000A0  00 00 FF 00 00 00  ......
我缓冲区当中都是一些这样的数据。。我是想把数据段数据显示到EDIT控件。。如果有5W个数据的话,使用一个一个遍历。。那且不是非常之慢?窗口会无响应的。注:EDIT控件,DDX绑定到CString了。。
请大家帮我想想思路。。思来想去 没有啥思路啊。。

解决方案 »

  1.   

    首先,你的EDIT再大,屏幕也只可能那么大,对吧
         所以,你不可能一次性显示那么多数据其次,排列是很规则的,假设你按16个数据一行,同时假设你能显示16行
         那么,你每次只处理16X16=256个数据,怎么说是一次50000个呢?再次,你一定要问滚动怎么处理
         你应该设置一个地址偏移变量,比如unsigned long offset=0;
         buff[offset}开始的256个数据是不是就是第一屏数据呢?
         向下滚动一行是不是就是offset=16呢
         向下滚动n行是不是就是offset=n*16呢
         向下滚动一屏是不是就是offset=16*16假设EDIT绑定了CString xStr;
    那么:
    void CXXXXX::SetData(long x)
    {
    offset=x*16;
    for(int i=0;i<256;i++)
    {     
    CString tmp;
    if(i&0xF==0) 
    tmp.Format("\n%08X  %02X",buff[offset+i]);
    else
    tmp.tmp.Format(" %02X",buff[offset+i]);
    xStr+=tmp;
    }
    UpdateData(false);
    }
      

  2.   


    可能是我的需求没有说明白。。我现在在做一个位图像素数据提取工具。。(也就是说,我要把一张位图的所有像素数据提取出来。)一张位图,没有经过任何压缩和处理。。像素的大小有 5W个字节很正常的。。您的例子for(int i = 0;i < 256;i++) 
    {
        .....
    }
    不知道是我理解错了,还是怎么。。您这里给一个起始地址后,循环结束后,提取出来的数据 也就  256个字节啊我现在 代码:。。
    for (int i = 0,j = 1; i < 256;i++,j++)
        {
            CString temp;
            if(j == 16) 
            {
                temp.Format(" %02X\r\n",Data.pData[i]); 
                j = 0;
            }
            else
            {
                temp.Format(" %02X",Data.pData[i]);
            }
                m_csData+=temp;
        }
        UpdateData(FALSE);
    如果 循环结束调节给 像素数据字节大小。那么 dlg窗口必定卡死不知道这样描述,您能不能看懂
      

  3.   

    版主大大,能否说详细点? 菜鸟 不太明白,如何一段一段给 EDIT空间赋值
      

  4.   

    假定EDIT控件只能显示20个字节,设立一个定时器,不停计算EDIT控件现在应该显示哪20个字节,从50000个字节里找出这20个字节,赋给EDIT控件
    例如,当前EDIT控件显示的是0~19这20个字节,操作者向下拖动了控制条或者点击了向下按钮等等,根据这个操作,程序把初始位置+20,定时器下次执行的时候,就将20~39这20个字节赋给EDIT控件要把50000个字节一次性赋给EDIT,是不可能不卡的,这个需求本身有问题才导致了这个问题
    所以问题的关键在于,怎么修改这个需求,既能满足用户需要又能降低对程序的要求
    如果楼主坚持“想把缓冲区里面的数据 全部显示到 EDIT控件中去”这个初始想法,那说白了,楼主就是想要一匹又能跑又不吃草的神马
    用户的想法和程序员的想法的区别就在于,用户想要程序看起来如何如何,程序员则需要让程序跑起来像是如何如何,但程序的内部实现机制管你用户怎么想!
      

  5.   

    用EDIT去看BUFF
    就好比透过放大镜看书你家放大镜能把整张纸都看完了啊?你是不是得拿着放大镜移动着看才能看全啊放大镜能观察的范围就是那个256个数据明白不?
      

  6.   

    你这个需求还真是.
    edit关联CString, 它只能显示字符串数据. 二进制数据只能格式化后才能显示.
    并且, edit中显示的字符个数也是有限制的, 并不能无限制的显示.
    显示多了, 速度慢是肯定的.
    要想快, 就只能部分显示, 监视编辑框滚动条滚动,然后显示哪段就格式化哪段.
      

  7.   

    每滚动一次显示某一行的数据,换成你的BYTE Buff[50000]就是 其中一组数据,为什么要一次全部显示?
    每次取10组数据,显示需要看的10组显示。