如果做動態曲線圖

jjjjjjjj

可能有不少的地方都要做這樣的動態的曲線圖的來表達流量的動態情況。我這裏做了一個這樣的CStatic控件的類。能動態的顯示出流量的趨勢

主要就重載CStatic類的OnPaint函數。

使用一個

typedef vector<CPoint>CPointArr;

來保存當前需要連結的點。

在OnPaint函數裏寫好這樣的內容就行了。

void CMyStatic::OnPaint()
{
 CPaintDC dc(this);
 DrawBK(dc);
 if (m_PointArr.size()>=2)
 {
  for(int i=0;i<m_PointArr.size()-1;i++)
  {
   DrawLine(dc,m_PointArr[i],m_PointArr[i+1],m_ColorLi);
  }
 }
}

畫背景的函數爲:


void CMyStatic::DrawBK(CDC& dc)
{
 CRect rect;
 GetClientRect(&rect);
 
 dc.FillSolidRect(&rect,m_ColorBk);

 this->GetWindowRect(&rect);
 ScreenToClient(&rect);
 
 CSize TGSize;
 TGSize.cx = rect.right - rect.left;
 TGSize.cy = rect.bottom - rect.top;

 //橫線
 int nH=TGSize.cy/20;
 for(int i=1;i<=nH;i++)
 {
  CPoint p1(rect.left,rect.top+20*i);
  CPoint p2(rect.right,rect.top+20*i);
  DrawLine(dc,p1,p2,m_ColorFram);
 }

 //圖豎線
 int nZ=TGSize.cx/20;
 for( i=1;i<=nZ;i++)
 {
  CPoint p1(rect.left+20*i,rect.top);
  CPoint p2(rect.left+20*i,rect.bottom);
  DrawLine(dc,p1,p2,m_ColorFram);
 }
}


void CMyStatic::DrawLine(CDC& dc,CPoint _p1,CPoint _p2,COLORREF _color)
{
 CPen newPen(PS_SOLID,1,_color);
 CPen* oldPen=dc.SelectObject(&newPen);
 dc.MoveTo(_p1);
 dc.LineTo(_p2);
 dc.SelectObject(oldPen);
}


void CMyStatic::AddPoint(int nCount)
{
 nCount=100-nCount;

 TRACE("加入的點的y軸的內容:%d/n",nCount);
 CRect rect;
 GetClientRect(&rect);

 //移動以前的
 for(int i=0;i<m_PointArr.size();i++)
 {
  m_PointArr[i].Offset(-10,0);
 }

 //是不是太多
 int nZ=rect.Width()/10+1;
 if (m_PointArr.size()>=nZ)
 {
  m_PointArr.erase(m_PointArr.begin());
  CPoint temp=m_PointArr[m_PointArr.size()];
  temp.x=rect.left;
  m_PointArr[m_PointArr.size()]=temp;
 }
 
 /*轉換成100%*/
 CPoint point(rect.right,rect.Height()*nCount/100);
 m_PointArr.push_back(point);

 Invalidate();
}

發佈了32 篇原創文章 · 獲贊 0 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章