📄 dwgview.cpp
字号:
// 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 + -