📄 f11999115dlg.cpp
字号:
// F11999115Dlg.cpp : implementation file
//
#include "stdafx.h"
#include "F11999115.h"
#include "F11999115Dlg.h"
#include "math.h"
#define PI_2 2*(double)3.14159265358979323846
#define PI (double)3.14159265358979323846
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CAboutDlg dialog used for App About
class CAboutDlg : public CDialog
{
public:
CAboutDlg();
// Dialog Data
//{{AFX_DATA(CAboutDlg)
enum { IDD = IDD_ABOUTBOX };
//}}AFX_DATA
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CAboutDlg)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL
// Implementation
protected:
//{{AFX_MSG(CAboutDlg)
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
//{{AFX_DATA_INIT(CAboutDlg)
//}}AFX_DATA_INIT
}
void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CAboutDlg)
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
//{{AFX_MSG_MAP(CAboutDlg)
// No message handlers
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CF11999115Dlg dialog
CF11999115Dlg::CF11999115Dlg(CWnd* pParent /*=NULL*/)
: CDialog(CF11999115Dlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CF11999115Dlg)
m_nn =51;
m_Wc = 1/4.0;
m_a=25;
m_type=0;
m_fir=0;
m_choose=0;
Hn=new double[256];
Xn=new double[256];
Hd=new double[256];
Hw=new double[256];
Wn=new double[256];
Xw=new double[256];
Ww=new double[256];
I=new double[256];
I1=new double[256];
m_low = 1/64.0f;
m_high = 1/2.0f;
//}}AFX_DATA_INIT
// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void CF11999115Dlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CF11999115Dlg)
DDX_Control(pDX, IDC_FILTER, m_Filter);
DDX_Text(pDX, IDC_NN, m_nn);
DDX_Text(pDX, IDC_WC, m_Wc);
DDX_Text(pDX, IDC_EDIT_LOW, m_low);
DDX_Text(pDX, IDC_EDIT_HIGH, m_high);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CF11999115Dlg, CDialog)
//{{AFX_MSG_MAP(CF11999115Dlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_EN_CHANGE(IDC_NN, OnChangeNn)
ON_BN_CLICKED(IDC_RECT, OnRect)
ON_BN_CLICKED(IDC_HAMING, OnHaming)
ON_BN_CLICKED(IDC_FILTER, OnFilter)
ON_BN_CLICKED(IDC_HANNING, OnHanning)
ON_BN_CLICKED(IDC_BLACKMAN, OnBlackman)
ON_BN_CLICKED(IDC_TRI, OnTri)
ON_EN_CHANGE(IDC_WC, OnChangeWc)
ON_BN_CLICKED(IDC_SEQUENCE, OnSequence)
ON_EN_CHANGE(IDC_EDIT_LOW, OnChangeEditLow)
ON_EN_CHANGE(IDC_EDIT_HIGH, OnChangeEditHigh)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CF11999115Dlg message handlers
BOOL CF11999115Dlg::OnInitDialog()
{
CDialog::OnInitDialog();
m_Filter.EnableWindow(FALSE);
// Add "About..." menu item to system menu.
// IDM_ABOUTBOX must be in the system command range.
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
CString strAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}
// Set the icon for this dialog. The framework does this automatically
// when the application's main window is not a dialog
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon
int i;
for(i=0;i<256;i++)
{ Hn[i]=0; Wn[i]=0; }
return TRUE; // return TRUE unless you set the focus to a control
}
void CF11999115Dlg::OnSysCommand(UINT nID, LPARAM lParam)
{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
else
{
CDialog::OnSysCommand(nID, lParam);
}
}
// If you add a minimize button to your dialog, you will need the code below
// to draw the icon. For MFC applications using the document/view model,
// this is automatically done for you by the framework.
void CF11999115Dlg::OnPaint()
{ LONG i;
CString str;
int wc;
double max,max2,min,max1,min1;
CPaintDC dc(this); // device context for painting
CWnd* pWnd=GetDlgItem(IDC_STATIC_HN);
CDC* pDC=pWnd->GetDC();
pWnd->Invalidate(FALSE);
pWnd->UpdateWindow();
pDC->Rectangle(-25,0,285,200);
////
CWnd* pWnd2=GetDlgItem(IDC_STATIC_FUDU);
CDC* pDCHw=pWnd2->GetDC();
pWnd2->Invalidate(FALSE);
pWnd2->UpdateWindow();
pDCHw->Rectangle(-25,0,285,200);
////
CWnd* pWnd0=GetDlgItem(IDC_STATIC_XN);
CDC* pDCXn=pWnd0->GetDC();
pWnd0->Invalidate(FALSE);
pWnd0->UpdateWindow();
pDCXn->Rectangle(-20,0,285,200);
CWnd* pWnd1=GetDlgItem(IDC_STATIC_YN);
CDC* pDCYn=pWnd1->GetDC();
pWnd1->Invalidate(FALSE);
pWnd1->UpdateWindow();
pDCYn->Rectangle(-20,0,285,200);
CWnd* pWnd3=GetDlgItem(IDC_STATIC_XIANGWEI);
CDC* pDCWw=pWnd3->GetDC();
pWnd3->Invalidate(FALSE);
pWnd3->UpdateWindow();
pDCWw->Rectangle(-25,0,285,200);
CPen* penred=new CPen;
penred->CreatePen(PS_SOLID,1,RGB(255,0,0));
CPen* penblue=new CPen;
CPen* pencyan=new CPen;
CPen* pengreen=new CPen;
CPen* penyellow=new CPen;
CPen* pendot=new CPen;
penblue->CreatePen(PS_SOLID,1,RGB(0,0,255));
pendot->CreatePen(PS_DOT,1,RGB(100,100,0));
pencyan->CreatePen(PS_SOLID,1,RGB(120,150,120));
penyellow->CreatePen(PS_SOLID,1,RGB(200,180,0));
pengreen->CreatePen(PS_SOLID,1,RGB(20,230,20));
pDC->SelectObject(penred);
pDC->MoveTo(10,10); //对应衰减特性20log(|H(ejw)|
pDC->LineTo(10,170);
pDC->LineTo(265,170);
pDC->LineTo(265,10);
pDC->LineTo(10,10);
////
pDC->MoveTo(10,50);
pDC->LineTo(6,50);
pDC->MoveTo(10,90);
pDC->LineTo(6,90);
pDC->MoveTo(10,130);
pDC->LineTo(6,130);
pDCXn->SelectObject(penred);
pDCXn->MoveTo(10,10);
pDCXn->LineTo(10,170);
pDCXn->LineTo(265,170);
pDCXn->LineTo(265,10);
pDCXn->LineTo(10,10);
pDCXn->MoveTo(10,90);
pDCXn->LineTo(265,90);
pDCXn->MoveTo(10,50);
pDCXn->LineTo(6,50);
pDCXn->MoveTo(10,90);
pDCXn->LineTo(6,90);
pDCXn->MoveTo(10,130);
pDCXn->LineTo(6,130);
pDCYn->SelectObject(penred);
pDCYn->MoveTo(10,10); //对应衰减特性20log(|H(ejw)|
pDCYn->LineTo(10,170);
pDCYn->LineTo(265,170);
pDCYn->LineTo(265,10);
pDCYn->LineTo(10,10);
pDCYn->MoveTo(10,90);
pDCYn->LineTo(265,90);
pDCYn->MoveTo(10,50);
pDCYn->LineTo(6,50);
pDCYn->MoveTo(10,90);
pDCYn->LineTo(6,90);
pDCYn->MoveTo(10,130);
pDCYn->LineTo(6,130);
pDCHw->SelectObject(penred);
/////
pDCHw->MoveTo(10,10); //对应幅频特性|H(ejw)|
pDCHw->LineTo(10,170);
pDCHw->LineTo(265,170);
pDCHw->LineTo(265,10);
pDCHw->LineTo(10,10);
pDCHw->MoveTo(10,50);
pDCHw->LineTo(6,50);
pDCHw->MoveTo(10,90);
pDCHw->LineTo(6,90);
pDCHw->MoveTo(10,130);
pDCHw->LineTo(6,130);
pDCWw->SelectObject(penred);
pDCWw->MoveTo(10,10); //对应特性|W(ejw)|
pDCWw->LineTo(10,170);
pDCWw->LineTo(265,170);
pDCWw->LineTo(265,10);
pDCWw->LineTo(10,10);
pDCWw->MoveTo(10,50);
pDCWw->LineTo(6,50);
pDCWw->MoveTo(10,90);
pDCWw->LineTo(6,90);
pDCWw->MoveTo(10,130);
pDCWw->LineTo(6,130);
/* for(i=0;i<=256;i+=64)
{
str.Format("%.2f", */
str.Format("(dB)");
pDC->TextOut(-18,20,str);
str.Format("n");
pDCXn->TextOut(226,180,str);
pDCYn->TextOut(226,180,str);
str.Format("0");
pDC->TextOut(0,4,str);
pDCXn->TextOut(-2,84,str);
pDCYn->TextOut(-2,84,str);
str.Format("w/π");
pDC->TextOut(226,180,str);
pDCHw->TextOut(226,180,str);
pDCWw->TextOut(226,180,str);
for(i=0;i<=256;i+=32)
{ pDCHw->MoveTo(10+i,170);
pDCHw->LineTo(10+i,174);
pDCWw->MoveTo(10+i,170);
pDCWw->LineTo(10+i,174);
pDC->MoveTo(10+i,170);
pDC->LineTo(10+i,174);
pDCXn->MoveTo(10+i,170);
pDCXn->LineTo(10+i,174);
pDCYn->MoveTo(10+i,170);
pDCYn->LineTo(10+i,174);
if(i%64==0) {
str.Format("%.1f",i/128.0); //写横坐标值
pDC->TextOut(i,173,str);
pDCHw->TextOut(i,173,str);
pDCWw->TextOut(i,173,str);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -