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 + -
显示快捷键?