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

📄 dwgview.cpp

📁 发送数字波形,可以选择方形
💻 CPP
📖 第 1 页 / 共 3 页
字号:
// DWGView.cpp : implementation of the CDWGView class
//

#include "stdafx.h"
#include "DWG.h"

#include "DWGDoc.h"
#include "DWGView.h"
#include "HanshuboDlg.h"


#include "math.h"

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

//全局变量
//int data[256];
//long int Freq=4;
//float pp=4.5;
//double Shiji=0.03125;
//int Select=3;

/////////////////////////////////////////////////////////////////////////////
// CDWGView

IMPLEMENT_DYNCREATE(CDWGView, CFormView)

BEGIN_MESSAGE_MAP(CDWGView, CFormView)
	//{{AFX_MSG_MAP(CDWGView)
	ON_WM_CTLCOLOR()
	ON_BN_CLICKED(IDC_BUTTON2, OnButton2)
	ON_BN_CLICKED(IDC_BUTTON3, OnButton3)
	ON_BN_CLICKED(IDC_BUTTON4, OnButton4)
	ON_BN_CLICKED(IDC_BUTTON5, OnButton5)
	ON_BN_CLICKED(IDC_BUTTON6, OnButton6)
	ON_BN_CLICKED(IDC_BUTTON7, OnButton7)
	ON_BN_CLICKED(IDC_BUTTON8, OnButton8)
	ON_WM_PAINT()
	ON_WM_HSCROLL()
	ON_EN_CHANGE(IDC_EDIT2, OnChangeFreq)
	ON_WM_CREATE()
	ON_WM_MOUSEMOVE()
	ON_WM_RBUTTONDOWN()
	ON_WM_LBUTTONDOWN()
	ON_BN_CLICKED(IDC_BUTTON9, OnButtonUp)
	ON_BN_CLICKED(IDC_BUTTON10, OnButtonDown)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CDWGView construction/destruction

CDWGView::CDWGView()
	: CFormView(CDWGView::IDD)
{
	//{{AFX_DATA_INIT(CDWGView)
	m_pp = 4500;
	m_Freq =4;
	//}}AFX_DATA_INIT
	// TODO: add construction code here



}

CDWGView::~CDWGView()
{
}

void CDWGView::DoDataExchange(CDataExchange* pDX)
{
	CFormView::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CDWGView)
	DDX_Slider(pDX, IDC_TRACKBAR2, m_pp);
	DDX_Text(pDX, IDC_EDIT2, m_Freq);
	DDV_MinMaxInt(pDX, m_Freq, 0, 1900);
	//}}AFX_DATA_MAP
}

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

	//设置power
	

	return CFormView::PreCreateWindow(cs);
}

void CDWGView::OnInitialUpdate()
{
	CFormView::OnInitialUpdate();
    

	
	
	GetParentFrame()->RecalcLayout();
	ResizeParentToFit();
	m_nMouseButtonDown=FALSE;
	Counter=0;
	//设置滑杆
	Hanshu=0;

	 Freq=4;
	 pp=4.5;
	 Shiji=0.03125;
//	 Select=3;

	CString str;
	
	CSliderCtrl* pSlide2=(CSliderCtrl *)GetDlgItem(IDC_TRACKBAR2);
	

	pSlide2->SetRange(1,5000);
	pSlide2->SetPos(m_nTrackbar2);
	pSlide2->SetPos(4500);
	str.Format("%d",4500);
	SetDlgItemText(IDC_STATIC_TRACK2,str+"mv");

}

/////////////////////////////////////////////////////////////////////////////
// CDWGView diagnostics

#ifdef _DEBUG
void CDWGView::AssertValid() const
{
	CFormView::AssertValid();
}

void CDWGView::Dump(CDumpContext& dc) const
{
	CFormView::Dump(dc);
}

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

/////////////////////////////////////////////////////////////////////////////
// CDWGView message handlers






HBRUSH CDWGView::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
{
		//改变背景颜色
	HBRUSH hbr = CFormView::OnCtlColor(pDC, pWnd, nCtlColor);
	
	// TODO: Change any attributes of the DC here
	
	// TODO: Return a different brush if the default is not desired
	//return hbr;


//	return CBrush(RGB(0,0,0));
	return (hbr);
}


void CDWGView::OnButton2() 
{
	// TODO: Add your control notification handler code here
	//方波
	Select=1;
 
	
   // Invalidate(TRUE);
//	UpdateWindow( );
	OnPaint();
}

void CDWGView::OnButton3() 
{
	// TODO: Add your control notification handler code here
	//锯齿波
	Select=2;
	//Invalidate(TRUE);
	//UpdateWindow( );
	
	OnPaint();
	
}
void CDWGView::OnButton4() 
{
	// TODO: Add your control notification handler code here
	// 正弦波
	Select=3;
	
	OnPaint();
}
void CDWGView::OnButton5() 
{
	// TODO: Add your control notification handler code here
	//三角波
	Select=4;

	OnPaint();
}

void CDWGView::OnButton6() 
{
	// TODO: Add your control notification handler code here
	//脉冲波
	Select=5;

	OnPaint();
}

void CDWGView::OnButton7() 
{
	// TODO: Add your control notification handler code here
	//函数波   SetRenyiboLed();
	Select=6;

	CHanshuboDlg hanshubo;
	hanshubo.DoModal ();
	

	OnPaint();
    //CHanshuboDlg hanshubo;
	//hanshubo.DoModal();
	

}

void CDWGView::OnButton8() 
{
	// TODO: Add your control notification handler code here
	//任意波

	CString str;
	str="\n\n⑶从绘图格子上你只能画出一个周期的波形!";
	AfxMessageBox("请注意:\n\n⑴ 你必需在绘图格子上绘图,并且只能作出单值波形!\n\n ⑵开始作图时点击鼠标右键,结束作图时再点击一次鼠标右键!"+str);
	Select=7;
	int i;
	for(i=0;i<256;i++)
		data[i]=0;
	Counter=0;
	OnPaint();
}



void CDWGView::OnPaint() 
{
	CPaintDC dc(this); // device context for painting
	// TODO: Add your message handler code here
	//声明一个CDC的对象用来绘图
	CDC BkDC;
	BkDC.CreateCompatibleDC(NULL);
	//声明一个位图对象
	CBitmap mBk;
	mBk.LoadBitmap(IDB_Backgroud);
	//载入你的位图
    CBitmap *pOldBit1=BkDC.SelectObject(&mBk);
	dc.BitBlt(0,0,575,356,&BkDC,0,0,SRCCOPY);
	BkDC.SelectObject(pOldBit1);
	CWnd* pWnd=GetDlgItem(IDC_STATIC1);
	CDC* pControlDC=pWnd->GetDC();
	pWnd->Invalidate();
	pWnd->UpdateWindow();
	pControlDC->SelectStockObject(BLACK_BRUSH);
	  switch(Select)
	{
	case 1:
		Fangbo(pControlDC);
		break;
	case 2:
		Juchibo(pControlDC);
		break;
	case 3:
		SINX(pControlDC);
		break;
	case 4:
		Sanjiaobo(pControlDC);
		break;
	case 5:
		Maichongbo(pControlDC);
		break;
	case 6:
		Hanshubo(pControlDC);

		break;
	case 7:
		Renyibo(pControlDC);
		break;
 //   default :
	//	MessageBox("错误!!!");
	}
	pWnd->ReleaseDC(pControlDC);
	
	
	SetPowerLed();
	SetRenyiboLed();
	SetHanshuboLed();
	SetMaichongboLed();
	SetSanjiaoboLed();
	SetSinLed();
	SetJuchiboLed();
	SetFangboLed();
	PPLedDisplay(m_pp);
	FreqLedDisplay(m_Freq);
    
	

	
	// Do not call CFormView::OnPaint() for painting messages
}


void CDWGView::Fangbo(CDC *pDC)
{  
	//CPaintDC dc(this);
//		MessageBox("方波");
	CBitmap mBit;
	CDC MemDC;
	MemDC.CreateCompatibleDC(NULL);
    mBit.LoadBitmap(IDB_Display);
	CBitmap *pOldBit=MemDC.SelectObject(&mBit);
	pDC->BitBlt(2,7,900,700,&MemDC,0,0,SRCCOPY);
	MemDC.SelectObject(pOldBit);
	CPen pen; 
	pen.CreatePen(PS_SOLID,1,RGB(255,0,0));//创建一个红色的2个象素的实线画笔 
	CPen *pOldPen=pDC->SelectObject(&pen);//将该画笔选到你绘图的DC设备中 
   	pDC->MoveTo(203,125);
	int i,k=1,p=0;
	double n;
	int  X=203,Y=125,x=203,y=125,X0=203,Y0=125,x0=203,y0=125;
	for(i=0;i<128;i++)
        data[i]=0;
	for(i=128;i<256;i++)
		data[i]=int(pp*255/5.0);
	n=4*Shiji*Freq*256;
	for(i=0;i<=n;i++)
	{
		if(i>(k*256-1))
		{
			k++;
			p=256*(k-1);
		}
		X0=X;
		X=int(203.0+198*i/n);
		x0=x;
		x=int(203.0-198*i/n);
		Y0=Y;
		Y=int(125-236.0*(data[i-p]-127.5*pp/5.0)/255.0);
		y0=y;
		y=int(125-236.0*(data[255-(i-p)]-127.5*pp/5.0)/255.0);
		
		pDC->MoveTo(X0,Y0);
		pDC->LineTo(X,Y);
		pDC->MoveTo(x0,y0);
		pDC->LineTo(x,y);
	}

	pDC->SelectObject(pOldPen);
	OutputWave();


}

void CDWGView::Juchibo(CDC *pDC)
{
//	MessageBox("锯齿波");
	CBitmap mBit;
	CDC MemDC;
	MemDC.CreateCompatibleDC(NULL);
    mBit.LoadBitmap(IDB_Display);
	CBitmap *pOldBit=MemDC.SelectObject(&mBit);
	pDC->BitBlt(2,7,900,700,&MemDC,0,0,SRCCOPY);
	MemDC.SelectObject(pOldBit);

	CPen pen; 
	pen.CreatePen(PS_SOLID,1,RGB(255,0,0));//创建一个红色的2个象素的实线画笔 
	CPen *pOldPen=pDC->SelectObject(&pen);//将该画笔选到你绘图的DC设备中 
   	pDC->MoveTo(203,240);
	int i,k=1,p=0;
	double n;
	int  X=203,Y=240,x=203,y=240,X0=203,Y0=240,x0=203,y0=240;
	for(i=0;i<256;i++)
            data[i]=int(pp*255*i/5/255);
	n=4*Shiji*Freq*256;
	for(i=0;i<=n;i++)
	{
		if(i>(k*256-1))
		{
			k++;
			p=256*(k-1);
		}
		X0=X;
		X=int(203.0+198*i/n);
		x0=x;
		x=int(203.0-198*i/n);
		Y0=Y;
		Y=int(240-230.0*data[i-p]/255.0);
		y0=y;
		y=int(240-230.0*data[255-(i-p)]/255.0);
		pDC->MoveTo(X0,Y0);
		pDC->LineTo(X,Y);
		pDC->MoveTo(x0,y0);
		pDC->LineTo(x,y);
	}

	pDC->SelectObject(pOldPen);

	OutputWave();
	
}
void CDWGView::SINX(CDC* pDC)
{   
	//MessageBox("正弦波");
	CBitmap mBit;
	CDC MemDC;
	MemDC.CreateCompatibleDC(NULL);
    mBit.LoadBitmap(IDB_Display);
	CBitmap *pOldBit=MemDC.SelectObject(&mBit);
	pDC->BitBlt(2,7,900,700,&MemDC,0,0,SRCCOPY);
	MemDC.SelectObject(pOldBit);
//	MemDC.SetBkColor(rColor);
	//下面是将你的位图贴到你的View中
	//假设你的View的dc是pDC指针(dc对象也可以)
	//将位图按照原来的大小贴到(0,0)坐标开始的地方
      //MemDC.MoveTo(201,119);中心点坐标
//	CDC MemDC;
	CPen pen; 
	pen.CreatePen(PS_SOLID,1,RGB(255,0,0));//创建一个红色的2个象素的实线画笔 
	CPen *pOldPen=pDC->SelectObject(&pen);//将该画笔选到你绘图的DC设备中 
   	pDC->MoveTo(203,125);
	int i,k=1,p=0;
	double pi=3.141592654,n;
	int  X=203,Y=125,x=203,y=125,X0=203,Y0=125,x0=203,y0=125;
	for(i=0;i<256;i++)
            data[i]=int(pp*127.5*(1+sin(2*pi*i/255))/5.0);
	n=4*Shiji*Freq*256;
	for(i=0;i<=n;i++)
	{
		if(i>(k*256-1))
		{
			k++;
			p=256*(k-1);
		}
		X0=X;
		X=int(203.0+198*i/n);
		x0=x;
		x=int(203.0-198*i/n);
		Y0=Y;
		Y=int(125-236.0*(data[i-p]-127.5*pp/5.0)/255.0);
		y0=y;
		y=int(125-236.0*(data[255-(i-p)]-127.5*pp/5.0)/255.0);
		
		pDC->MoveTo(X0,Y0);
		pDC->LineTo(X,Y);
		pDC->MoveTo(x0,y0);
		pDC->LineTo(x,y);
	}

	pDC->SelectObject(pOldPen);
	OutputWave();

}

void CDWGView::Sanjiaobo(CDC *pDC)
{
//MessageBox("三角波");
	CBitmap mBit;
	CDC MemDC;
	MemDC.CreateCompatibleDC(NULL);
    mBit.LoadBitmap(IDB_Display);
	CBitmap *pOldBit=MemDC.SelectObject(&mBit);
	pDC->BitBlt(2,7,900,700,&MemDC,0,0,SRCCOPY);
	MemDC.SelectObject(pOldBit);

	CPen pen; 
	pen.CreatePen(PS_SOLID,1,RGB(255,0,0));//创建一个红色的2个象素的实线画笔 
	CPen *pOldPen=pDC->SelectObject(&pen);//将该画笔选到你绘图的DC设备中 
   	pDC->MoveTo(203,240);
	int i,k=1,p=0;
	double n;
	int  X=203,Y=240,x=203,y=240,X0=203,Y0=240,x0=203,y0=240;
	for(i=0;i<128;i++)
            data[i]=data[255-i]=int(pp*255*i/5/127);
	n=4*Shiji*Freq*256;
	for(i=0;i<=n;i++)
	{
		if(i>(k*256-1))
		{
			k++;
			p=256*(k-1);
		}
		X0=X;
		X=int(203.0+198*i/n);
		x0=x;
		x=int(203.0-198*i/n);
		Y0=Y;
		Y=int(240-230.0*data[i-p]/255.0);
		y0=y;
		y=int(240-230.0*data[255-(i-p)]/255.0);
		pDC->MoveTo(X0,Y0);
		pDC->LineTo(X,Y);
		pDC->MoveTo(x0,y0);
		pDC->LineTo(x,y);
	}

	pDC->SelectObject(pOldPen);

	OutputWave();



}

void CDWGView::Maichongbo(CDC *pDC)
{
//	MessageBox("脉冲波");
	CBitmap mBit;
	CDC MemDC;
	MemDC.CreateCompatibleDC(NULL);
    mBit.LoadBitmap(IDB_Display);
	CBitmap *pOldBit=MemDC.SelectObject(&mBit);
	pDC->BitBlt(2,7,900,700,&MemDC,0,0,SRCCOPY);
	MemDC.SelectObject(pOldBit);

	CPen pen; 
	pen.CreatePen(PS_SOLID,1,RGB(255,0,0));//创建一个红色的2个象素的实线画笔 
	CPen *pOldPen=pDC->SelectObject(&pen);//将该画笔选到你绘图的DC设备中 
   	pDC->MoveTo(203,240);
	int i,k=1,p=0;
	double n;
	int  X=203,Y=240,x=203,y=240,X0=203,Y0=240,x0=203,y0=240;
	for(i=0;i<255;i++)

⌨️ 快捷键说明

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