有这样一个结构体
typedef struct tagDrawPuBuTuData 
{
__int64 m_i64Hz_Freq;//测量频率,8字节,单位Hz
UINT m_iHz_Ifbw;//中频带宽,8字节,单位Hz
int m_iGainValue;//参考电平值
unsigned char m_cTime[23];//测量时间(YYYY.MM.DD.HH.MM.SS.mmm)
//频域图形数据
short m_iPointNum; //频谱曲线点数
short m_Data[2000]; //电平数据
}DrawPuBuTuData;vector<DrawPuBuTuData> m_vectorDrawPuBuTuData;一屏显示60行方块,我限制了m_vectorDrawPuBuTuData.size,只有60个每行又有60种不同色的方块,要全部依次画出来设备每次来一包数据我就要将它加到vector里面,重绘一次vector,里面所有的值,使图有不断的变化效果画图主要用到是 m_data[2000]数组,里面有2000个数据,画图的时候要根据敏个点的值来选择不同的颜色,现在图是画出来了,就是CPU特别的高,有没有好的方法以下是相关代码
if (m_vectorDrawPuBuTuData.size()>0)
{
int nX=0,nXNext=0,nY=0,nYNext=0;
double _dEveryDBHeight=0.00,_dEveryDBWidth=0.00;
_dEveryDBHeight=(m_iPingPuTuHeight)*1.000000/MAXPUBUDATACOUNT;//MAXPUBUDATACOUNT=60,这个就是vector的大小
_dEveryDBWidth=(m_iPingPuTuWidth)*1.000000/(m_DrawPuBuTuData.m_iPointNum-1);//2000点数据
vector<DrawPuBuTuData>::iterator it;
int nindexPuBuData=0;
for (it=m_vectorDrawPuBuTuData.begin();it!=m_vectorDrawPuBuTuData.end();it++)
{
DrawPuBuTuData *current=(DrawPuBuTuData*)it;
nY=int(_dEveryDBHeight*nindexPuBuData);
nYNext=int(_dEveryDBHeight*(nindexPuBuData+1));
nindexPuBuData++;
for (int i=0;i<m_DrawPuBuTuData.m_iPointNum;i++)
{
short level=current->m_Data[i];
COLORREF color=SelectColorByLevel(level);
  nX=int(_dEveryDBWidth*i);
nXNext=int(_dEveryDBWidth*(i+1));
_dcMemory->FillSolidRect(m_nLeft+nX,m_nTop+nY,nXNext-nX,nYNext-nY,color);
}
}

解决方案 »

  1.   

    建议你使用在DIB里先生成你的图,再显示出来
      

  2.   

    _dcMemory就是用cdc创建的兼容DC.先在兼容DC上画在兼容的bitmap上,,,,最后用bilblt显出来的
      

  3.   

    [code=C/C++]//获得豪秒
    float FDSYSTEM::getGetTickCount(float delay)
    {
    delay=GetTickCount();//获得豪秒
    return delay;
    }//获取帖速
    float FDSYSTEM::getFrameSpeed(float delay)
    {
    return GetTickCount() - delay;
    }
    //控制帖速
    int FDSYSTEM::setFrameSpeed(float delay,float speed)
    {
    int difftm = GetTickCount() - delay;
    if(difftm < speed)
    {
    ::Sleep(speed - difftm);//主动放弃CPU使用时间
    return 0;//帖速不合符要求
    }
    return 1;//帖速合符要求
    }
    [code/]
    你试试这个,
      

  4.   

    现在看来主要问题在于那个循环,每帧所有的物体都要重绘吗?
    如果不是,你可不可以这样试试,给每个元素增加一个 bool bChanged 的属性,只有当发生变化的时候才进行重绘