📄 linedlg.cpp
字号:
// LineDlg.cpp : implementation file
//
#include "stdafx.h"
#include "FFT.h"
//#include "FFT.cpp"
#include "LineDlg.h"
#include "math.h"
// #include "MainFrm.h"
// #include "FFTView.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CLineDlg dialog
CLineDlg::CLineDlg(CWnd* pParent /*=NULL*/)
: CDialog(CLineDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CLineDlg)
index = 0;
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
//}}AFX_DATA_INIT
}
void CLineDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CLineDlg)
DDX_Control(pDX, IDC_SHOWBITMPA, m_ShowPic);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CLineDlg, CDialog)
//{{AFX_MSG_MAP(CLineDlg)
ON_WM_PAINT()
ON_WM_CREATE()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CLineDlg message handlers
void CLineDlg::OnPaint()
{
CPaintDC dc(this); // device context for painting
CString temp;
switch (index2)
{
case 1:
SetDlgItemText(IDC_DFFT,"DFT");
break;
case 2:
SetDlgItemText(IDC_DFFT,"FFT");
break;
}
switch (index)
{
case 1:
SetDlgItemText(IDC_TIP,"高斯序列");
temp.Format("p值:%.2f",para1);
SetDlgItemText(IDC_PARA1,temp);
temp.Format("q值:%.2f",para2);
SetDlgItemText(IDC_PARA2,temp);
m_ShowPic.SetBitmap(::LoadBitmap(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_BITMAP1)));
break;
case 2:
SetDlgItemText(IDC_TIP,"衰减正弦序列");
temp.Format("a值:%.2f",para1);
SetDlgItemText(IDC_PARA1,temp);
temp.Format("f值:%.4f",para2);
SetDlgItemText(IDC_PARA2,temp);
m_ShowPic.SetBitmap(::LoadBitmap(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_BITMAP2)));
break;
case 3:
SetDlgItemText(IDC_TIP,"三角波序列");
GetDlgItem(IDC_PARA1)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_PARA2)->ShowWindow(SW_HIDE);
m_ShowPic.SetBitmap(::LoadBitmap(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_BITMAP3)));
break;
case 4:
SetDlgItemText(IDC_TIP,"反三角序列序列");
GetDlgItem(IDC_PARA1)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_PARA2)->ShowWindow(SW_HIDE);
m_ShowPic.SetBitmap(::LoadBitmap(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_BITMAP4)));
break;
}
CString str;
str.Format("序列长度: %d",LineCount);
SetDlgItemText(IDC_STATIC_COUNT,str);
//在相应的图标框上左图
DrawLine(1, xMaxreal, xPreal);
DrawLine(2, xMaximg, xPimg);
DrawLine(3, XMaxAbs, XPabs);
DrawLine(4, XMaxArg, XParg);
DrawLine(5, XMaxreal, XPreal);
DrawLine(6, XMaximg, XPimg);
// Do not call CDialog::OnPaint() for painting messages
// AddList();
}
BOOL CLineDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// TODO: Add extra initialization here
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
int CLineDlg::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CDialog::OnCreate(lpCreateStruct) == -1)
return -1;
// TODO: Add your specialized creation code here
return 0;
}
//专门在控件上画线的函数
//参数 n为索引,max为相应的y最大值,num为相应的y的数列
void CLineDlg::DrawLine(int n, double max,double *num)
{
double detaX ,detaY;
CRect rect;
CStatic *pWndLine;
//得到对应的画板
switch (n)
{
case 1:
pWndLine = (CStatic *)GetDlgItem(IDC_PALETTE1);
break;
case 2:
pWndLine = (CStatic *)GetDlgItem(IDC_PALETTE2);
break;
case 3:
pWndLine = (CStatic *)GetDlgItem(IDC_PALETTE3);
break;
case 4:
pWndLine = (CStatic *)GetDlgItem(IDC_PALETTE4);
break;
case 5:
pWndLine = (CStatic *)GetDlgItem(IDC_PALETTE5);
break;
case 6:
pWndLine = (CStatic *)GetDlgItem(IDC_PALETTE6);
break;
}
//得到画板的大小
pWndLine->GetClientRect(&rect);
CClientDC pLinwDC(pWndLine);
pLinwDC.SetBkMode(TRANSPARENT); //设置文字背景颜色
pLinwDC.SetMapMode(MM_TEXT); //Y轴向下,画图时候要加负号
//设置原点
pLinwDC.SetViewportOrg(int(rect.right/(LineCount+2)),int(rect.bottom/2));
detaX = (double)(rect.right/(LineCount+2)); //x轴间距
detaY = (double)(0.5 * (rect.Height()-30) / max); //y轴间距,重新计算,以及y的大小
CPen axisPen, pointPen;
CPen *pOldPen;
CFont bigFont, smallFont,smallestFont;
CFont *pOldFont;
axisPen.CreatePen(PS_SOLID,2,RGB(0,0,0)); //黑线
pointPen.CreatePen(PS_SOLID,1,RGB(255,0,0)); //红线
bigFont.CreatePointFont(100,"Arial",NULL);
smallFont.CreatePointFont(80,"Arial",NULL); //小字体
smallestFont.CreatePointFont(60,"Arial",NULL);
pOldPen = pLinwDC.SelectObject(&axisPen);
//绘制x,y坐标轴
pLinwDC.MoveTo(0,0);
pLinwDC.LineTo((int)(detaX*LineCount),0);
pLinwDC.MoveTo((int)(detaX*LineCount),0);
pLinwDC.LineTo((int)(detaX*LineCount-8),-4);
pLinwDC.MoveTo((int)(detaX*LineCount),0);
pLinwDC.LineTo((int)(detaX*LineCount-8),4);
pLinwDC.MoveTo(0,rect.bottom/2-10);
pLinwDC.LineTo(0,-1*(rect.bottom/2-10));
//求最大值的次方数,用于标注10的几次方
//之后要创建字体
CString str;
pOldFont = pLinwDC.SelectObject(&bigFont);
str.Format("%d",10);
pLinwDC.TextOut(0,-1*(rect.bottom/2-2),str);
pLinwDC.SelectObject(&smallFont);
int ymax =(int)log10(max);
str.Format("%d",ymax);
pLinwDC.TextOut(0+14,-1*(rect.bottom/2),str);
//绘制线段
pLinwDC.SelectObject(&pointPen);
// pLinwDC.SelectObject(pOldFont);
pLinwDC.SelectObject(&smallestFont);
pLinwDC.SelectObject(&smallFont);
int i,x,y;
// int interBiaozhu = (int)(LineCount / 5);
int interBiaozhu ;
if (LineCount < 10)
{
interBiaozhu = 5;
}
else
{
interBiaozhu = log10(LineCount);
interBiaozhu = pow(10.0,interBiaozhu)/2;
}
double y1;
for (i=0; i<LineCount; i++)
{
if (i % interBiaozhu == 0 && i !=0)
{
str.Format("%d",i);
pLinwDC.TextOut((int)(i * detaX - 4) , 3, str);
}
x = (int)(i * detaX);
y1 = num[i];
y = (int)(y1 * detaY);
if (y == 0)
{
pLinwDC.Ellipse(x-2,-2,x+2,2);
}
else
{
pLinwDC.MoveTo(x,0);
pLinwDC.LineTo(x,-y);
pLinwDC.Ellipse(x-2,-y-2,x+2,-y+2);
}
}
pLinwDC.SelectObject(pOldPen);
// pLinwDC.SelectObject(pOldFont);
axisPen.DeleteObject();
pointPen.DeleteObject();
bigFont.DeleteObject();
smallFont.DeleteObject();
smallestFont.DeleteObject();
}
void CLineDlg::PostNcDestroy()
{
// TODO: Add your specialized code here and/or call the base class
//
// extern gloabCount;
// CMainFrame *pFrame =
// (CMainFrame*)AfxGetApp()->m_pMainWnd;
// CFFTView *pView = (CFFTView *)pFrame->GetActiveView();
// int num = pView->m_iDlgNum;
delete []XPreal;
delete []XPimg;
delete []XPabs;
delete []XParg;
delete []xPimg;
delete []xPreal;
delete this;
CDialog::PostNcDestroy();
}
void CLineDlg::OnOK()
{
// TODO: Add extra validation here
DestroyWindow();
// CDialog::OnOK();
}
void CLineDlg::AddList()
{
// static m_bool = FALSE;
// if (!m_bool)
{
CListBox *list;
CString str;
int i;
list = (CListBox *)GetDlgItem(IDC_LIST1);
for (i=0; i<LineCount; i++)
{
str.Format("%2d %f",i,xPreal[i]);
list->AddString(str);
}
list = (CListBox *)GetDlgItem(IDC_LIST2);
for (i=0; i<LineCount; i++)
{
str.Format("%2d %f",i,xPimg[i]);
list->AddString(str);
}
list = (CListBox *)GetDlgItem(IDC_LIST3);
for (i=0; i<LineCount; i++)
{
str.Format("%2d %f",i,XPabs[i]);
list->AddString(str);
}
list = (CListBox *)GetDlgItem(IDC_LIST4);
for (i=0; i<LineCount; i++)
{
str.Format("%2d %f",i,XParg[i]);
list->AddString(str);
}
list = (CListBox *)GetDlgItem(IDC_LIST5);
for (i=0; i<LineCount; i++)
{
str.Format("%2d %f",i,XPreal[i]);
list->AddString(str);
}
list = (CListBox *)GetDlgItem(IDC_LIST6);
for (i=0; i<LineCount; i++)
{
str.Format("%2d %f",i,XPimg[i]);
list->AddString(str);
}
}
// m_bool = TRUE;
}
BOOL CLineDlg::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Add your specialized code here and/or call the base class
return CDialog::PreCreateWindow(cs);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -