📄 firtestdlg.cpp
字号:
// FirTestDlg.cpp : implementation file
//
#include "stdafx.h"
#include "FirTest.h"
#include "FirTestDlg.h"
#include "math.h"
#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 };
CButtonST m_OkBtn;
//}}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 HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor);
virtual BOOL OnInitDialog();
//}}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)
DDX_Control(pDX, IDOK, m_OkBtn);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
//{{AFX_MSG_MAP(CAboutDlg)
ON_WM_CTLCOLOR()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
BOOL CAboutDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// TODO: Add extra initialization here
m_OkBtn.DrawTransparent(TRUE);
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
HBRUSH CAboutDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
// TODO: Change any attributes of the DC here
if(nCtlColor==CTLCOLOR_DLG)
{
pDC->SetTextColor(RGB(0,0,255));
HBRUSH b=CreateSolidBrush(RGB(148,182,239));
return b;
}
else if(nCtlColor==CTLCOLOR_BTN)
{
pDC->SetBkMode(TRANSPARENT);
pDC->SetTextColor(RGB(0,0,255));
pDC->SetBkColor(RGB(255,0,0));
HBRUSH b=CreateSolidBrush(RGB(148,182,239));
return b;
}
else if(nCtlColor==CTLCOLOR_STATIC)
{
pDC->SetBkMode(TRANSPARENT);
pDC->SetTextColor(RGB(0,0,255));
HBRUSH b=CreateSolidBrush(RGB(148,182,239));
return b;
}
// TODO: Return a different brush if the default is not desired
return hbr;
}
/////////////////////////////////////////////////////////////////////////////
// CFirTestDlg dialog
CFirTestDlg::CFirTestDlg(CWnd* pParent /*=NULL*/)
: CDialog(CFirTestDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CFirTestDlg)
m_BitsCoefficient = 0;
m_BitsWave = 0;
m_CheckIndication = FALSE;
m_CheckLogX = FALSE;
m_CheckLogY = FALSE;
m_CheckOutAdd = FALSE;
m_CheckMagnitude = FALSE;
m_CheckPhase = FALSE;
m_RangeMagnitude = 0;
m_RangePhase = 0;
m_RadioOddEven = 0;
m_FrequencyUpper = 8000;
m_FrequencyLower = 0;
//}}AFX_DATA_INIT
// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void CFirTestDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CFirTestDlg)
DDX_Control(pDX, IDC_LIST, m_ListCtrl);
DDX_Control(pDX, IDC_ABOUT, m_AboutBtn);
DDX_Control(pDX, IDC_DESIGN, m_DesignBtn);
DDX_Control(pDX, IDOK, m_ExitBtn);
DDX_CBIndex(pDX, IDC_BITS_COEFFICIENT, m_BitsCoefficient);
DDX_CBIndex(pDX, IDC_BITS_WAVE, m_BitsWave);
DDX_Check(pDX, IDC_CHECK_INDICATION, m_CheckIndication);
DDX_Check(pDX, IDC_CHECK_LOGX, m_CheckLogX);
DDX_Check(pDX, IDC_CHECK_LOGY, m_CheckLogY);
DDX_Check(pDX, IDC_CHECK_OUTADD, m_CheckOutAdd);
DDX_Check(pDX, IDC_CHECK_MAGNITUDE, m_CheckMagnitude);
DDX_Check(pDX, IDC_CHECK_PHASE, m_CheckPhase);
DDX_CBIndex(pDX, IDC_RANGE_MAGNITUDE, m_RangeMagnitude);
DDX_CBIndex(pDX, IDC_RANGE_PHASE, m_RangePhase);
DDX_Radio(pDX, IDC_RADIO_NSYMMETRY_ODD, m_RadioOddEven);
DDX_Text(pDX, IDC_EDIT_FREQ_MAX, m_FrequencyUpper);
DDX_Text(pDX, IDC_EDIT_FREQ_MIN, m_FrequencyLower);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CFirTestDlg, CDialog)
//{{AFX_MSG_MAP(CFirTestDlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_WM_CTLCOLOR()
ON_BN_CLICKED(IDC_DESIGN, OnDesign)
ON_BN_CLICKED(IDC_ABOUT, OnAbout)
ON_BN_CLICKED(IDC_RADIO_NSYMMETRY_EVEN, OnRadioNsymmetryEven)
ON_BN_CLICKED(IDC_RADIO_NSYMMETRY_ODD, OnRadioNsymmetryOdd)
ON_BN_CLICKED(IDC_CHECK_INDICATION, OnCheckIndication)
ON_BN_CLICKED(IDC_CHECK_MAGNITUDE, OnCheckMagnitude)
ON_BN_CLICKED(IDC_CHECK_PHASE, OnCheckPhase)
ON_CBN_SELCHANGE(IDC_RANGE_MAGNITUDE, OnSelchangeRangeMagnitude)
ON_CBN_SELCHANGE(IDC_RANGE_PHASE, OnSelchangeRangePhase)
ON_EN_KILLFOCUS(IDC_EDIT_FREQ_MAX, OnKillfocusEditFreqMax)
ON_EN_KILLFOCUS(IDC_EDIT_FREQ_MIN, OnKillfocusEditFreqMin)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CFirTestDlg message handlers
BOOL CFirTestDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// 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)
{
pSysMenu->RemoveMenu(4,MF_BYPOSITION);
pSysMenu->RemoveMenu(2,MF_BYPOSITION);
pSysMenu->RemoveMenu(0,MF_BYPOSITION);
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
// TODO: Add extra initialization here
m_ListCtrl.InsertColumn (0, "a[x]");
m_ListCtrl.InsertColumn (1, "数值");
m_ListCtrl.SetColumnWidth (0, 45);
m_ListCtrl.SetColumnWidth (1, 45);
m_ListCtrl.InsertItemEx (0,1);
m_ListCtrl.InsertItemEx (1,2);
m_ListCtrl.InsertItemEx (2,3);
m_ListCtrl.InsertItemEx (3,4);
m_ListCtrl.InsertItemEx (4,5);
m_ListCtrl.InsertItemEx (5,4);
m_ListCtrl.InsertItemEx (6,3);
m_ListCtrl.InsertItemEx (7,2);
m_ListCtrl.InsertItemEx (8,1);
CheckRadioButton(IDC_RADIO_NSYMMETRY_ODD,IDC_RADIO_NSYMMETRY_EVEN,IDC_RADIO_NSYMMETRY_ODD);
ReadProfile();
CRect rect;
GetDlgItem(IDC_OSCOPE)->GetWindowRect(rect);
ScreenToClient(rect);
m_OScopeCtrl.Create(WS_VISIBLE | WS_CHILD, rect, this);
m_OScopeCtrl.m_bIndication=!m_CheckIndication;
m_OScopeCtrl.m_bMagnitude=m_CheckMagnitude;
m_OScopeCtrl.m_bPhase=m_CheckPhase;
m_ListCtrl.m_OddEven=m_RadioOddEven;
m_OScopeCtrl.SetTitle("Y幅度 X频率");
m_OScopeCtrl.SetBackColor(RGB(0,0,76));
m_OScopeCtrl.SetGridColor(RGB(240,240, 255));
switch(m_RangeMagnitude)
{
case 0: m_OScopeCtrl.SetRangeYA(0,150);break;
case 1: m_OScopeCtrl.SetRangeYA(-25,125);break;
case 2: m_OScopeCtrl.SetRangeYA(-50,100);break;
case 3: m_OScopeCtrl.SetRangeYA(-75,75);break;
case 4: m_OScopeCtrl.SetRangeYA(-100,50);break;
case 5: m_OScopeCtrl.SetRangeYA(-125,25);break;
case 6: m_OScopeCtrl.SetRangeYA(-150,0);break;
}
switch(m_RangePhase)
{
case 0: m_OScopeCtrl.SetRangeYB(0,180);break;
case 1: m_OScopeCtrl.SetRangeYB(0,270);break;
case 2: m_OScopeCtrl.SetRangeYB(0,360);break;
case 3: m_OScopeCtrl.SetRangeYB(0,540);break;
case 4: m_OScopeCtrl.SetRangeYB(0,720);break;
case 5: m_OScopeCtrl.SetRangeYB(45,225);break;
case 6: m_OScopeCtrl.SetRangeYB(45,315);break;
case 7: m_OScopeCtrl.SetRangeYB(45,405);break;
case 8: m_OScopeCtrl.SetRangeYB(45,585);break;
case 9: m_OScopeCtrl.SetRangeYB(45,765);break;
case 10:m_OScopeCtrl.SetRangeYB(90,270);break;
case 11:m_OScopeCtrl.SetRangeYB(90,360);break;
case 12:m_OScopeCtrl.SetRangeYB(90,450);break;
case 13:m_OScopeCtrl.SetRangeYB(90,630);break;
case 14:m_OScopeCtrl.SetRangeYB(90,810);break;
case 15:m_OScopeCtrl.SetRangeYB(180,360);break;
case 16:m_OScopeCtrl.SetRangeYB(180,450);break;
case 17:m_OScopeCtrl.SetRangeYB(180,540);break;
case 18:m_OScopeCtrl.SetRangeYB(180,720);break;
case 19:m_OScopeCtrl.SetRangeYB(-90,90);break;
case 20:m_OScopeCtrl.SetRangeYB(-180,90);break;
case 21:m_OScopeCtrl.SetRangeYB(-90,180);break;
case 22:m_OScopeCtrl.SetRangeYB(-180,180);break;
case 23:m_OScopeCtrl.SetRangeYB(-45,225);break;
case 24:m_OScopeCtrl.SetRangeYB(-180,360);break;
case 25:m_OScopeCtrl.SetRangeYB(-90,450);break;
case 26:m_OScopeCtrl.SetRangeYB(-180,0);break;
case 27:m_OScopeCtrl.SetRangeYB(-270,0);break;
case 28:m_OScopeCtrl.SetRangeYB(-360,0);break;
case 29:m_OScopeCtrl.SetRangeYB(-540,0);break;
case 30:m_OScopeCtrl.SetRangeYB(-720,0);break;
case 31:m_OScopeCtrl.SetRangeYB(-225,-45);break;
case 32:m_OScopeCtrl.SetRangeYB(-315,-45);break;
case 33:m_OScopeCtrl.SetRangeYB(-405,-45);break;
case 34:m_OScopeCtrl.SetRangeYB(-585,-45);break;
case 35:m_OScopeCtrl.SetRangeYB(-765,-45);break;
case 36:m_OScopeCtrl.SetRangeYB(-270,-90);break;
case 37:m_OScopeCtrl.SetRangeYB(-360,-90);break;
case 38:m_OScopeCtrl.SetRangeYB(-450,-90);break;
case 39:m_OScopeCtrl.SetRangeYB(-630,-90);break;
case 40:m_OScopeCtrl.SetRangeYB(-810,-90);break;
case 41:m_OScopeCtrl.SetRangeYB(-360,-180);break;
case 42:m_OScopeCtrl.SetRangeYB(-450,-180);break;
case 43:m_OScopeCtrl.SetRangeYB(-540,-180);break;
case 44:m_OScopeCtrl.SetRangeYB(-720,-180);break;
}
m_ExitBtn.DrawTransparent(TRUE);
m_ExitBtn.SetTooltipText("退出程序");
m_AboutBtn.DrawTransparent(TRUE);
m_AboutBtn.SetTooltipText("程序信息");
m_DesignBtn.DrawTransparent(TRUE);
m_DesignBtn.SetTooltipText("计算特性曲线");
m_ListCtrl.RefreshData(0);
OnDesign();
return TRUE; // return TRUE unless you set the focus to a control
}
void CFirTestDlg::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 CFirTestDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // device context for painting
SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
// Center icon in client rectangle
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
// Draw the icon
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialog::OnPaint();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -