MFC下正弦波的绘制

    MFC下绘制正弦波的曲线图。

波形截图如下:



绘制曲线部分的代码如下:

   //new wave 
	pDC = pGuiDlg->m_new_wave_control.GetDC();
	pGuiDlg->m_new_wave_control.GetClientRect(&rect); 

	//set background color
	pDC->SetViewportOrg(rect.left, rect.top);
    pDC->SetTextColor(RGB(255,0,0));//red
	pDC-> FillSolidRect(rect.left, rect.top, rect.right, rect.bottom, RGB(0,0,0));


	//set cordinate line color
	CPen  m_input_cordi_line_pen;
	m_input_cordi_line_pen.CreatePen(PS_SOLID,2,RGB(255, 0, 0));
    pDC->SelectObject(&m_input_cordi_line_pen);
	
  
	//x coordinate 
	pDC->SetViewportOrg(rect.left, rect.bottom/2);
	
    n = 0;
    nTemp=0;
	while (nTemp <= rect.right)
    {
		pDC->LineTo(60*n,0);
		pDC->LineTo(60*n,-5);
		pDC->MoveTo(60*n,0);
		pDC->TextOut(60*n-sPIText[n+1].GetLength()*3,16,sPIText[n+1]);

		n++;
		nTemp +=60;
	}
	//last point
	pDC->LineTo(rect.right, 0);

	pDC->MoveTo(rect.left, rect.bottom/2);

	
	//Y coordinate    
	pDC->SetDCPenColor(RGB(255,0,0));

	index = -10;
	nTemp = 0;
    for(n = 0; nTemp <= rect.bottom/2; n++, nTemp += 10) {
		pDC->LineTo(rect.left,index * n);
		pDC->LineTo(5, index * n);
		pDC->MoveTo(rect.left, index * n);
		//strTemp.Format("%s", -n);
		pDC->TextOut(10,index*n,strTemp);
	}



	pDC->MoveTo(rect.left, rect.bottom/2);
	index = -10;
	nTemp = 0;
    for(n = 0; nTemp <= rect.bottom/2; n++, nTemp += 10) {
		pDC->LineTo(rect.left, (index * n + rect.bottom/2));
		pDC->LineTo(5, (index * n + rect.bottom/2));
		pDC->MoveTo(rect.left, (index * n + rect.bottom/2));;
	}




	
	//set line color
	CPen m_input_line_pen;
	m_input_line_pen.CreatePen(PS_SOLID,2,RGB(255, 255, 0)); //yellow
    pDC->SelectObject(&m_input_line_pen);
    pDC->SetViewportOrg(rect.left, rect.bottom/2);



    fp = fopen(FileName, "wb");

	if(fp == NULL)
	{
		MessageBox(_T("无效文件!"));
		return;
	}
	int h = 0;
	char temp_value = 0x00;
    for (double i = 0; i < ((double)rect.right)/19.1; i = i + 0.00005)
    {
        
		pDC->LineTo(i*19.1,(char)(sin((double)i) * 80));
		temp_value = (char)(sin((double)(i)) * 80);

		if (h < 800*1024) {
			fwrite(&temp_value, sizeof(char), 1, fp);
		}
    }
	fclose(fp);


	return true;
程序运行时,另开一个线程负责该波形绘制,同时把相应正弦波数据写入文件保存。




你可能感兴趣的:(MFC)