⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ac6611_02view.cpp

📁 很好的一个控件例子
💻 CPP
字号:
// AC6611_02View.cpp : implementation of the CAC6611_02View class
//

#include "stdafx.h"
#include "AC6611_02.h"

#include "AC6611_02Doc.h"
#include "AC6611_02View.h"

#include "MemDC.h"
#include "Dia_01.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CAC6611_02View

IMPLEMENT_DYNCREATE(CAC6611_02View, CView)

BEGIN_MESSAGE_MAP(CAC6611_02View, CView)
	//{{AFX_MSG_MAP(CAC6611_02View)
	ON_COMMAND(IDM_Dia01, OnDia01)
	//}}AFX_MSG_MAP
	// Standard printing commands
	ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview)
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CAC6611_02View construction/destruction

CAC6611_02View::CAC6611_02View()
{
	// TODO: add construction code here

}

CAC6611_02View::~CAC6611_02View()
{
}

BOOL CAC6611_02View::PreCreateWindow(CREATESTRUCT& cs)
{
	// TODO: Modify the Window class or styles here by modifying
	//  the CREATESTRUCT cs

	return CView::PreCreateWindow(cs);
}

/////////////////////////////////////////////////////////////////////////////
// CAC6611_02View drawing

void CAC6611_02View::OnDraw(CDC* pDC)
{
	CAC6611_02Doc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	// TODO: add draw code for native data here
	pDC->SetBkColor(RGB(0,0,0));

	CMemDC dc(pDC);
	
	CRect rc;
	GetClientRect(&rc);
	
	int FontNum;
	FontNum=rc.Width()/50 <= rc.Height()/50 ? rc.Width()/50 : rc.Height()/30;
	if(FontNum<10)
	{
		FontNum=10;
	}

	CFont Font1,Font2,Font3,Font4,Font5;
	Font1.CreateFont(FontNum, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,"Verdana");
	Font2.CreateFont(FontNum*3/4, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0,"Verdana");
	CFont* oldFont = dc.SelectObject(&Font1);
	
	CPen* pPenGray = new CPen;
	CPen* pPenGreen = new CPen;
	CPen* pPenRed=new CPen;

	pPenGray->CreatePen(BS_SOLID,1,RGB(128,128,128));
	pPenGreen->CreatePen(PS_DOT,1,RGB(0,255,0));
	pPenRed->CreatePen(PS_SOLID,1,RGB(255,0,0));

	//绘制X、Y轴网格 选择绿色画笔
	dc.SelectObject(pPenGreen);
	int s;
	for (s = 0 ;s <= 14 ;s++)
	{
		if(s!=7)//平行y轴
		{
			dc.MoveTo(rc.Width()/100+s*rc.Width()*14/20/14,(rc.Height()*2/3)/75);
			dc.LineTo(rc.Width()/100+s*rc.Width()*14/20/14,(rc.Height()*2/3)*74/75);
		}

		if(s<=10 && s!=5)//平行x轴
		{
			dc.MoveTo(rc.Width()/100,(rc.Height()*2/3)*1/75+s*(rc.Height()*2/3)*73/75/10);
			dc.LineTo(rc.Width()/100+14*rc.Width()*14/20/14,(rc.Height()*2/3)*1/75+s*(rc.Height()*2/3)*73/75/10);
		}
	}
	delete pPenGreen;
	
	dc.SelectObject(pPenGray);//灰色分界线
	dc.MoveTo(0, rc.Height()*2/3);
	dc.LineTo(rc.Width(), rc.Height()*2/3);
	delete pPenGray;

	dc.SelectObject(pPenRed);//红色X、Y轴
	//x轴
	dc.MoveTo(rc.Width()/100, rc.Height()/3);
	dc.LineTo(rc.Width()/100+14*rc.Width()*14/20/14, rc.Height()/3);

	for(int j=0; j<=70; j++)
	{
		if((j%5)==0)
		{
			dc.MoveTo(rc.Width()/100+14*rc.Width()*14/20/14*j/70, rc.Height()/3-rc.Height()/3*6/200);
		}
		else
		{
			dc.MoveTo(rc.Width()/100+14*rc.Width()*14/20/14*j/70, rc.Height()/3-rc.Height()/3*3/200);
		}
		dc.LineTo(rc.Width()/100+14*rc.Width()*14/20/14*j/70, rc.Height()/3);
	
		if(j<=50 && j!=25)
		{
			if((j%5)==0)
			{
				dc.MoveTo(rc.Width()/100+7*rc.Width()*14/20/14+rc.Width()*2/400, (rc.Height()*2/3)/75+(rc.Height()*2/3)*73*j/75/50);
			}
			else
			{
				dc.MoveTo(rc.Width()/100+7*rc.Width()*14/20/14+rc.Width()*1/400, (rc.Height()*2/3)/75+(rc.Height()*2/3)*73*j/75/50);
			}
			dc.LineTo(rc.Width()/100+7*rc.Width()*14/20/14, (rc.Height()*2/3)/75+(rc.Height()*2/3)*73*j/75/50);
		}
	}

	//y轴
	dc.MoveTo(rc.Width()/100+7*rc.Width()*14/20/14,(rc.Height()*2/3)/75);
	dc.LineTo(rc.Width()/100+7*rc.Width()*14/20/14,(rc.Height()*2/3)*74/75);

	delete pPenRed;

	//版权
	dc.SelectObject(&Font2);
	dc.SetTextColor(RGB(255,255,0));
	dc.TextOut(rc.Width()/100+rc.Width()*80/100, rc.Height()*2/3+rc.Height()/3*7/8, "AC6611  (C)  2004.12  V1.0");

	dc.SelectObject(&Font1);
	dc.SetTextColor(RGB(255,255,255));
	dc.TextOut(rc.Width()*3/100+14.4*rc.Width()*14/20/14,rc.Height()*2/3/18-(rc.Height()*2/3)*2/75,"通道号");
	dc.TextOut(rc.Width()*3/100+16*rc.Width()*14/20/14,rc.Height()*2/3/18-(rc.Height()*2/3)*2/75,"采样值");
	dc.TextOut(rc.Width()*3/100+17.6*rc.Width()*14/20/14,rc.Height()*2/3/18-(rc.Height()*2/3)*2/75," 电压值");

	/*//显示信息
	if(m_BNTportio || m_BFileOpen)
	{
		if(G==1)
		{
			dc.TextOut(rc.Width()*2/100+7*rc.Width()*14/20/14,rc.Height()*2/3*3/75,"2V/div");
		}
		else
		{
			dc.TextOut(rc.Width()*2/100+7*rc.Width()*14/20/14,rc.Height()*2/3*3/75,"1V/div");
		}

		CString TimeY;
		TimeY.Format("%.1fs / div",Speed/1000.0*75);
		dc.TextOut(rc.Width()*2/100+12*rc.Width()*14/20/14,rc.Height()*2/3*33/75,TimeY);

		CString strPara;
		strPara.Format("起始通道:CH%d        停止通道:CH%d        输入范围:",StartCH,StopCH);
			
		switch(MessageState)
		{
		case 1:
			dc.TextOut(rc.Width()/100+rc.Width()/20,rc.Height()*2/3+rc.Height()/3*1/4,"当前状态:实时采样、绘制波形");
			dc.TextOut(rc.Width()/100+rc.Width()/20,rc.Height()*2/3+rc.Height()/3*2/4,strPara+strG+SampleFreq);
			break;

		case 2:
			dc.TextOut(rc.Width()/100+rc.Width()/20,rc.Height()*2/3+rc.Height()/3*1/6,"当前状态:实时采样、保存数据");
			dc.TextOut(rc.Width()/100+rc.Width()/20,rc.Height()*2/3+rc.Height()/3*2/6,"文件路径:"+FileDataNameTxt);
			dc.TextOut(rc.Width()/100+rc.Width()/20,rc.Height()*2/3+rc.Height()/3*3/6,strPara+strG+SampleFreq);
			dc.TextOut(rc.Width()/100+rc.Width()/20,rc.Height()*2/3+rc.Height()/3*4/6,"当前采样点:"+SamNum);
			break;
		
		case 3:
			dc.TextOut(rc.Width()/100+rc.Width()/20,rc.Height()*2/3+rc.Height()/3*1/8,"当前状态:读取数据、绘制波形");
			dc.TextOut(rc.Width()/100+rc.Width()/20,rc.Height()*2/3+rc.Height()/3*2/8,"文件路径:"+FileName);
			dc.TextOut(rc.Width()/100+rc.Width()/20,rc.Height()*2/3+rc.Height()/3*3/8,strPara+strG+SampleFreq);
			dc.TextOut(rc.Width()/100+rc.Width()/20,rc.Height()*2/3+rc.Height()/3*4/8,"总采样点数:"+strFileLength);
			dc.TextOut(rc.Width()/100+rc.Width()/20,rc.Height()*2/3+rc.Height()/3*5/8,"播放起始点:"+strStartPoint);
			dc.TextOut(rc.Width()/100+rc.Width()/20,rc.Height()*2/3+rc.Height()/3*6/8,"当前数据点:"+DataCount);
			break;
		}

		for(int k=0; k<16; k++)
		{
			dc.SetTextColor(SetColor(k));

			if(k>=StartCH && k<=StopCH)
			{
				//显示通道号
				CString str;
				str.Format(" CH%d",k);
				dc.TextOut(rc.Width()*3/100+14.4*rc.Width()*14/20/14,rc.Height()*2/3*(k+2)/18-(rc.Height()*2/3)*2/75,str);
			
				//显示采样值
				str.Format(" %d",data[k-StartCH]);
				dc.TextOut(rc.Width()*3/100+16*rc.Width()*14/20/14,rc.Height()*2/3*(k+2)/18-(rc.Height()*2/3)*2/75,str);
													
				//显示电压值
				str.Format("%6.3fV",Convert(G,data[k-StartCH]));
				dc.TextOut(rc.Width()*3/100+17.6*rc.Width()*14/20/14,rc.Height()*2/3*(k+2)/18-(rc.Height()*2/3)*2/75,str);
			}
			else
			{
				//显示通道号
				CString str;
				str.Format(" CH%d",k);
				dc.TextOut(rc.Width()*3/100+14.4*rc.Width()*14/20/14,rc.Height()*2/3*(k+2)/18-(rc.Height()*2/3)*2/75,str);
			
				//显示采样值
				str="  ------";
				dc.TextOut(rc.Width()*3/100+16*rc.Width()*14/20/14,rc.Height()*2/3*(k+2)/18-(rc.Height()*2/3)*2/75,str);
													
				//显示电压值
				dc.TextOut(rc.Width()*3/100+17.6*rc.Width()*14/20/14,rc.Height()*2/3*(k+2)/18-(rc.Height()*2/3)*2/75,str);
			}
		}
	}
	else
	{
		dc.TextOut(rc.Width()/100+rc.Width()/20,rc.Height()*2/3+rc.Height()/3*1/4,Message);
		dc.TextOut(rc.Width()/100+rc.Width()/20,rc.Height()*2/3+rc.Height()/3*2/4,"您将无法进行与AC6611硬件相关的任何操作!");
		
		for(int m=0; m<16; m++)
		{
			dc.SetTextColor(SetColor(m));
			
			//显示通道号
			CString str;
			str.Format(" CH%d",m);
			dc.TextOut(rc.Width()*3/100+14.4*rc.Width()*14/20/14,rc.Height()*2/3*(m+2)/18-(rc.Height()*2/3)*2/75,str);
				
			//显示采样值
			str="  ------";
			dc.TextOut(rc.Width()*3/100+16*rc.Width()*14/20/14,rc.Height()*2/3*(m+2)/18-(rc.Height()*2/3)*2/75,str);
														
			//显示电压值
			dc.TextOut(rc.Width()*3/100+17.6*rc.Width()*14/20/14,rc.Height()*2/3*(m+2)/18-(rc.Height()*2/3)*2/75,str);
		}
	}

	//绘制波形
	for(OffsetCH=StartCH; OffsetCH<=StopCH; OffsetCH++)
	{
		if(GetCheckState(OffsetCH))
		{

			CPen* pPen=new CPen;
			pPen->CreatePen(PS_SOLID,1,SetColor(OffsetCH));
			dc.SelectObject(pPen);

			int y1;
			int y2;	

			for(int i=0; i<(int)SampleTimes; i++)
			{	
				y1=(int)DataBuff[OffsetCH-StartCH+CHNumber*i]*((rc.Height()*2/3)*36/75)/4095;
				y2=(int)(DataBuff[OffsetCH-StartCH+CHNumber*i]-2048)*(rc.Height()*2/3)*36/75/2048;

				if(G==2)
				{
					if(y2>=(rc.Height()*2/3)*36/75)
							y2=(rc.Height()*2/3)*36/75;
					if(y2<=-(rc.Height()*2/3)*36/75)
							y2=-(rc.Height()*2/3)*36/75;
				
					if(i==0)
					{
						dc.MoveTo((SampleTimes-i+1)*14*rc.Width()*14/20/14/1500+rc.Width()/100,(rc.Height()/3-y2));
					}
					dc.LineTo((SampleTimes-i+1)*14*rc.Width()*14/20/14/1500+rc.Width()/100,(rc.Height()/3-y2));
				}
				else
				{
					if(y1>=(rc.Height()*2/3)*36/75)
							y1=(rc.Height()*2/3)*36/75;
					if(y1<=0.0)
							y1=0;
				
					if(i==0)
					{
						dc.MoveTo((SampleTimes-i)*14*rc.Width()*14/20/14/1500+rc.Width()/100,(rc.Height()/3-y1));
					}
					dc.LineTo((SampleTimes-i)*14*rc.Width()*14/20/14/1500+rc.Width()/100,(rc.Height()/3-y1));
				}
			}
			delete pPen;
		}
	}*/
    
}

/////////////////////////////////////////////////////////////////////////////
// CAC6611_02View printing

BOOL CAC6611_02View::OnPreparePrinting(CPrintInfo* pInfo)
{
	// default preparation
	return DoPreparePrinting(pInfo);
}

void CAC6611_02View::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: add extra initialization before printing
}

void CAC6611_02View::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: add cleanup after printing
}

/////////////////////////////////////////////////////////////////////////////
// CAC6611_02View diagnostics

#ifdef _DEBUG
void CAC6611_02View::AssertValid() const
{
	CView::AssertValid();
}

void CAC6611_02View::Dump(CDumpContext& dc) const
{
	CView::Dump(dc);
}

CAC6611_02Doc* CAC6611_02View::GetDocument() // non-debug version is inline
{
	ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CAC6611_02Doc)));
	return (CAC6611_02Doc*)m_pDocument;
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CAC6611_02View message handlers

void CAC6611_02View::OnDia01() 
{
	// TODO: Add your command handler code here
	CDia_01 dia01;
	dia01.DoModal();
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -