窗口繪圖函數


struct CoordXY
{    
    double x;
    
    double y;
};

 

//存儲壓強和位移二維值
vector<CoordXY> WxpReadIOAnalog::vAnalog21PS(0);    
 

void DialogC::OnPaint()
{
	//CPaintDC dc(this); // device context for painting
	// TODO: 在此處添加消息處理程序代碼
	// 不爲繪圖消息調用 CDialog::OnPaint()
	const int xStart=50;
	const int xEnd=850;

	const int yStart=100;
	const int yEnd=600;

	srand(::GetTickCount());

	//繪圖
	CClientDC dc(this);
	CPen pen(PS_SOLID, 1, RGB(0,0,255));//創建一個實線線條,寬度爲1,藍色的畫筆對象  
	CPen* pOldPen = dc.SelectObject(&pen);//將畫筆對象選入到設備描述表中  

	dc.SetBkMode(TRANSPARENT);
	dc.SetTextColor(RGB(0, 0, 0));

	//繪製橫座標
	//橫座標[100--900],長度爲800
	CString str("");
	for(int i=0;i<=yEnd-yStart;i=i+50)
	{
		dc.MoveTo(xStart,yStart+i);
		dc.LineTo(xEnd,  yStart+i);

		str.Format("%4.1f",i/25.0);
		dc.TextOutA(xStart-30,yEnd-i-10,str);
	}
	str=("MPa");
	dc.TextOutA(xStart-30,yStart-40,str);
	dc.MoveTo(xStart,yEnd);
	dc.LineTo(xEnd+20,yEnd);


	//繪製縱座標
	//縱座標[200,700],長度爲500
	for(int i=xStart;i<=xEnd;i=i+50)
	{
		dc.MoveTo(i,yStart);
		dc.LineTo(i,yEnd);

		str.Format("%3.1f",(i-xStart)/50.0);
		dc.TextOutA(i-10,yEnd+10,str);
	}
	str=("mm");
	dc.TextOutA(xEnd+30,yEnd+10,str);

	dc.MoveTo(xStart,yEnd);
	dc.LineTo(xStart,yStart-20);

	dc.SelectObject(pOldPen);//恢復設備描述表 
	pen.DeleteObject();

	//真實數據繪製
	//繪製時,座標轉換是x=100+x;y=600-y;
	CPen pen2(PS_SOLID, 1, RGB(255,0,0));     //創建一個線條,寬度爲1,紅色的畫筆對象  
	pOldPen = dc.SelectObject(&pen2);         //將畫筆對象選入到設備描述表中


	int x=0;
	int y=0;

	dc.MoveTo(xStart,yEnd);	
	int iCount=WxpReadIOAnalog::vAnalog21PS.size();
	for(int i=0;i<iCount;i++)
	{
		x=static_cast<int>(WxpReadIOAnalog::vAnalog21PS[i].x*0.02*50.0);
		y=static_cast<int>(WxpReadIOAnalog::vAnalog21PS[i].y*25.0);
		dc.LineTo(xStart+x,yEnd-y);
	}
	dc.SelectObject(pOldPen);                 //恢復設備描述表 
	pen2.DeleteObject();
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章