firtestdlg.cpp
来自「一个fir滤波器Designer的例子」· C++ 代码 · 共 698 行 · 第 1/2 页
CPP
698 行
}
// The system calls this to obtain the cursor to display while the user drags
// the minimized window.
HCURSOR CFirTestDlg::OnQueryDragIcon()
{
return (HCURSOR) m_hIcon;
}
HBRUSH CFirTestDlg::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_EDIT)
{
pDC->SetTextColor(RGB(0,0,255));
HBRUSH b=CreateSolidBrush(RGB(240,240,255));
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;
}
else if(nCtlColor==CTLCOLOR_LISTBOX)
{
pDC->SetBkMode(TRANSPARENT);
pDC->SetTextColor(RGB(0,0,255));
HBRUSH b=CreateSolidBrush(RGB(240,240,255));
return b;
}
// TODO: Return a different brush if the default is not desired
return hbr;
}
void CFirTestDlg::OnDesign()
{
// TODO: Add your control notification handler code here
int i,j;
int ya[320];
int yw[320];
double w,bm,ba;
int inx;
int m;
//int m=GetCheckedRadioButton(IDC_RADIO1,IDC_RADIO2);
UpdateData();
m=m_ListCtrl.GetItemCount();
if(m<256)
{
for(i=0;i<m;i++)
{
m_h[i]=m_ListCtrl.GetItemNum(i);
}
}
else
return;
inx=0;
for(i=0;i<m;i++)
{
if(m_h[i]>0) inx+=m_h[i];
else inx-=m_h[i];
}
//--------------------------------------------------------------
if(m%2)
{
if(m_RadioOddEven==1)
{
//N为奇数,h(n)偶对称
for(i=0;i<320;i++)
{
w=i*3.1415926/160;
yw[i]=(int)(-(m-1)/4*i);
ba=m_h[(m-1)/2];
for(j=1;j<=(m-1)/2;j++)
{
bm=2*m_h[(m-1)/2-j];
ba+=bm*cos(w*j);
}
ya[i]=(int)(ba*120/inx);
}
}
else
{
//N为奇数,h(n)奇对称
for(i=0;i<320;i++)
{
w=i*3.1415926/160;
yw[i]=(int)(40-(m-1)/4*i);
ba=m_h[(m-1)/2];
for(j=1;j<=(m-1)/2;j++)
{
bm=2*m_h[(m-1)/2-j];
ba+=bm*sin(w*j);
}
ya[i]=(int)(ba*120/inx);
}
}
}
else
{
if(m_RadioOddEven==1)
{
//N为偶数,h(n)偶对称
for(i=0;i<320;i++)
{
w=i*3.1415926/160;
yw[i]=(int)(-(m-1)/4.0*i);
ba=0;
for(j=1;j<=m/2;j++)
{
bm=2*m_h[m/2-j];
ba+=bm*cos(w*(j-0.5));
}
ya[i]=(int)(ba*120/inx);
}
}
else
{
//N为偶数,h(n)奇对称
for(i=0;i<320;i++)
{
w=i*3.1415926/160;
yw[i]=(int)(40-(m-1)/4.0*i);
ba=0;
for(j=1;j<=m/2;j++)
{
bm=2*m_h[m/2-j];
ba+=bm*sin(w*(j-0.5));
}
ya[i]=(int)(ba*120/inx);
}
}
}
//--------------------------------------------------------------
if(m_CheckOutAdd==TRUE)
m_OScopeCtrl.m_bCover=FALSE;
else
m_OScopeCtrl.m_bCover=TRUE;
m_OScopeCtrl.SetData(ya,yw);
}
void CFirTestDlg::OnOK()
{
// TODO: Add extra validation here
WriteProfile();
CDialog::OnOK();
}
void CFirTestDlg::OnAbout()
{
// TODO: Add your control notification handler code here
CAboutDlg about;
about.DoModal();
}
BOOL CFirTestDlg::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Add your specialized code here and/or call the base class
return CDialog::PreCreateWindow(cs);
}
void CFirTestDlg::ReadProfile()
{
CWinApp *pApp=AfxGetApp();
//[Title]
if(pApp->GetProfileString("Title","Author","")!="Dragon")
MessageBox("该程序由DRAGON设计,谢谢使用!","FIR-DESIGNER",NULL);
//[Option]
m_RangeMagnitude=pApp->GetProfileInt("Option","RangeMagnitude",0);
m_RangePhase=pApp->GetProfileInt("Option","RangePhase",0);
m_BitsCoefficient=pApp->GetProfileInt("Option","BitsCoefficient",0);
m_BitsWave=pApp->GetProfileInt("Option","BitsWave",0);
m_CheckIndication=pApp->GetProfileInt("Option", "Indication",0);
m_CheckLogX=pApp->GetProfileInt("Option","LogX",0);
m_CheckLogY=pApp->GetProfileInt("Option","LogY",0);
m_CheckOutAdd=pApp->GetProfileInt("Option","OutAdd",0);
m_CheckMagnitude=pApp->GetProfileInt("Option","Magnitude",0);
m_CheckPhase=pApp->GetProfileInt("Option","Phase",0);
m_RadioOddEven=pApp->GetProfileInt("Option","OddEven",0);
UpdateData(FALSE);
}
void CFirTestDlg::WriteProfile()
{
UpdateData();
CWinApp *pApp=AfxGetApp();
//[Title]
pApp->WriteProfileString("Title","Author","Dragon");
//[Option]
pApp->WriteProfileInt("Option","RangeMagnitude",m_RangeMagnitude);
pApp->WriteProfileInt("Option","RangePhase",m_RangePhase);
pApp->WriteProfileInt("Option","BitsCoefficient",m_BitsCoefficient);
pApp->WriteProfileInt("Option","BitsWave",m_BitsWave);
pApp->WriteProfileInt("Option", "Indication",m_CheckIndication);
pApp->WriteProfileInt("Option","LogX",m_CheckLogX);
pApp->WriteProfileInt("Option","LogY",m_CheckLogY);
pApp->WriteProfileInt("Option","OutAdd",m_CheckOutAdd);
pApp->WriteProfileInt("Option","Magnitude",m_CheckMagnitude);
pApp->WriteProfileInt("Option","Phase",m_CheckPhase);
int m=GetCheckedRadioButton(IDC_RADIO_NSYMMETRY_ODD,IDC_RADIO_NSYMMETRY_EVEN)-IDC_RADIO_NSYMMETRY_ODD;
pApp->WriteProfileInt("Option","OddEven",m);
}
void CFirTestDlg::OnRadioNsymmetryOdd()
{
// TODO: Add your control notification handler code here
m_ListCtrl.m_OddEven=0;
m_ListCtrl.RefreshData(0);
}
void CFirTestDlg::OnRadioNsymmetryEven()
{
// TODO: Add your control notification handler code here
m_ListCtrl.m_OddEven=1;
m_ListCtrl.RefreshData(0);
}
void CFirTestDlg::OnCheckIndication()
{
// TODO: Add your control notification handler code here
UpdateData();
m_OScopeCtrl.m_bIndication=!m_CheckIndication;
m_OScopeCtrl.InvalidateCtrl();
}
void CFirTestDlg::OnCheckMagnitude()
{
// TODO: Add your control notification handler code here
UpdateData();
m_OScopeCtrl.m_bMagnitude=m_CheckMagnitude;
m_OScopeCtrl.InvalidateCtrl();
}
void CFirTestDlg::OnCheckPhase()
{
// TODO: Add your control notification handler code here
UpdateData();
m_OScopeCtrl.m_bPhase=m_CheckPhase;
m_OScopeCtrl.InvalidateCtrl();
}
void CFirTestDlg::OnSelchangeRangeMagnitude()
{
// TODO: Add your control notification handler code here
UpdateData();
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;
}
m_OScopeCtrl.InvalidateCtrl();
}
void CFirTestDlg::OnSelchangeRangePhase()
{
// TODO: Add your control notification handler code here
UpdateData();
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_OScopeCtrl.InvalidateCtrl();
}
void CFirTestDlg::OnKillfocusEditFreqMax()
{
// TODO: Add your control notification handler code here
UpdateData();
m_OScopeCtrl.SetRangeX(m_FrequencyLower,m_FrequencyUpper);
m_OScopeCtrl.InvalidateCtrl();
}
void CFirTestDlg::OnKillfocusEditFreqMin()
{
// TODO: Add your control notification handler code here
UpdateData();
m_OScopeCtrl.SetRangeX(m_FrequencyLower,m_FrequencyUpper);
m_OScopeCtrl.InvalidateCtrl();
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?