📄 mainfrm.cpp
字号:
// MainFrm.cpp : implementation of the CMainFrame class
//
#include "stdafx.h"
#include "FFT.h"
#include "MainFrm.h"
#include "TimeView.h"
#include "Splash.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CMainFrame
IMPLEMENT_DYNCREATE(CMainFrame, CFrameWnd)
BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
//{{AFX_MSG_MAP(CMainFrame)
ON_WM_CREATE()
ON_WM_KEYDOWN()
ON_WM_TIMER()
ON_WM_DESTROY()
//}}AFX_MSG_MAP
ON_MESSAGE(WM_OUTBAR_NOTIFY, OnOutbarNotify)
ON_UPDATE_COMMAND_UI(ID_INDICATOR_SHIFT,OnUpdateKeyShift)
END_MESSAGE_MAP()
static UINT indicators[] =
{
ID_SEPARATOR, // status line indicator
ID_SEPARATOR, //频率,高度
ID_SEPARATOR, //time
ID_INDICATOR_SHIFT, //显示Shift键的状态
ID_INDICATOR_CAPS,
ID_INDICATOR_NUM,
ID_INDICATOR_SCRL,
};
/////////////////////////////////////////////////////////////////////////////
// CMainFrame construction/destruction
CMainFrame::CMainFrame()
{
// TODO: add member initialization code here
}
CMainFrame::~CMainFrame()
{
}
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
return -1;
if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP
| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
!m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
{
TRACE0("Failed to create toolbar\n");
return -1; // fail to create
}
if (!m_wndStatusBar.Create(this) ||
!m_wndStatusBar.SetIndicators(indicators,
sizeof(indicators)/sizeof(UINT)))
{
TRACE0("Failed to create status bar\n");
return -1; // fail to create
}
// TODO: Delete these three lines if you don't want the toolbar to
// be dockable
m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
EnableDocking(CBRS_ALIGN_ANY);
DockControlBar(&m_wndToolBar);
m_animIcon.SetImageList(IDB_ANIM_IMGLIST2,4,RGB(0,0,0));
// set the timer to fire every .5 seconds
m_timerID = this->SetTimer(99,100,NULL);
// CG: The following line was added by the Splash Screen component. CSplashWnd::ShowSplashScreen(this);
return 0;
}
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
if( !CFrameWnd::PreCreateWindow(cs) )
return FALSE;
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
return TRUE;
}
/////////////////////////////////////////////////////////////////////////////
// CMainFrame diagnostics
#ifdef _DEBUG
void CMainFrame::AssertValid() const
{
CFrameWnd::AssertValid();
}
void CMainFrame::Dump(CDumpContext& dc) const
{
CFrameWnd::Dump(dc);
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CMainFrame message handlers
BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
{
if(!wndSplitter.CreateStatic(this,1,2))return false;
if(!m_wndSplitter2.CreateStatic(&wndSplitter,2,1,
WS_CHILD | WS_VISIBLE, wndSplitter.IdFromRowCol(0, 1)))return false;
//创建标准视图,时域波形视图
m_wndSplitter2.CreateView(0, 0, RUNTIME_CLASS(CTimeView),
CSize(0, 200), pContext);
//创建标准视图,频域波形视图
m_wndSplitter2.CreateView(1, 0, pContext->m_pNewViewClass,
CSize(0, 0), pContext);
CRect r;
int w1,w2;
// CView * m_view=pContext->m_pLastView;
pDoc=(CFFTDoc*)pContext->m_pCurrentDoc;
/*
if(!wndSplitter.CreateView(0,1,pContext->m_pNewViewClass,
CSize(0,0),pContext))return false;*/
//创建outbar控件
wndBar.Create(WS_CHILD|WS_VISIBLE,CRect(0,0,0,0),&wndSplitter,
wndSplitter.IdFromRowCol(0,0));
//令控件的消息发送至mainframe而不是其父窗口splitter
wndBar.SetOwner(this);
//创建控制图形列表
imaLarge.Create(IDB_IMAGELIST,32,0,RGB(128,128,128));//4
imaSmall.Create(IDB_SMALL_IMAGELIST,16,0,RGB(0,128,128));
//将图像与控件相链接
wndBar.SetImageList(&imaLarge,CGfxOutBarCtrl::fLargeIcon);
wndBar.SetImageList(&imaSmall,CGfxOutBarCtrl::fSmallIcon);
wndBar.SetAnimationTickCount(20);wndBar.SetAnimSelHighlight(200);//...
//加入文件夹
wndBar.AddFolder("窗函数选择",0);
wndBar.AddFolder("噪声选择",1);
wndBar.AddFolder("傅立叶变换输入函数",2);
wndBar.AddFolder("功率谱分析",3);
//加入item
wndBar.InsertItem(0,0,"Hamming",0,0);
wndBar.InsertItem(0,1,"Hanning",1,0);
wndBar.InsertItem(0,2,"triangle",2,0);
wndBar.InsertItem(0,3,"Blackman",4,0);
wndBar.InsertItem(0,4,"4 term Blackman-Harris",0,0);
wndBar.InsertItem(1,0,"无噪声",5,0);
wndBar.InsertItem(1,1,"高斯噪声",6,0);
wndBar.InsertItem(1,2,"均匀噪声",4,0);
wndBar.InsertItem(2,0,"正弦波",0,0);
wndBar.InsertItem(2,1,"方波",1,0);
wndBar.InsertItem(2,2,"复合波",2,0);
wndBar.InsertItem(3,0,"复合波",3,0);
wndBar.InsertItem(3,1,"打开文件",2,0);
wndBar.InsertItem(3,2,"关闭文件",1,0);
wndBar.SetSelFolder(3);
GetClientRect(&r);
w1=r.Width()/5;
w2=r.Width()/4;
wndSplitter.SetColumnInfo(0,w1,0);
wndSplitter.SetColumnInfo(1,w2,0);
wndSplitter.RecalcLayout();
w1=r.Height()*2/3;
w2=r.Height()/3;
m_wndSplitter2.SetRowInfo(1,w2,0);
m_wndSplitter2.SetRowInfo(0,w1,0);
m_wndSplitter2.RecalcLayout();
// SetActiveView(CTimeView);
return true;
//return CFrameWnd::OnCreateClient(lpcs, pContext);
}
long CMainFrame::OnOutbarNotify(WPARAM wParam, LPARAM lParam)
{ // CFFTDoc* pDoc = (CFFTDoc*)GetActiveDocument();//当前并无活动的Document
switch (wParam)
{
case NM_OB_ITEMCLICK:
// cast the lParam to an integer to get the clicked item
{
int index = (int) lParam;
int folder=wndBar.GetFolderData();
CString cs, cs1;
cs1 = wndBar.GetItemText(index);
cs.Format("Clicked on %d - <%s>", (int)lParam, cs1);
// AfxMessageBox(cs);
SetActiveView(NULL);
// BOOL sendresult=SendMessage(WM_MSG_WAVE,folder,lParam);
// pDoc->M=folder;
//SendMessage(WM_MSG_WAVE,folder,lParam);
//GetOwner()->SendMessage(WM_MSG_WAVE,folder,lParam);
switch(folder)
{case 0:pDoc->wtype=index;if(pDoc->m_fop)pDoc->OnFileOpen();break;
case 1:pDoc->ntype=index;break;
case 2:pDoc->m_bPower=false;
switch(index)
{case 0:pDoc->Square();break;
case 1:pDoc->SinWave();break;
case 2:pDoc->fSigFloat();break;
default:break;
};
break;
case 3: pDoc->m_bPower=true;
switch(index)
{case 0:pDoc->fSigFloat();break;
case 1:pDoc->OnFileOpen();break;
case 2:pDoc->Closefp();break;
};break;
default:break;
};
}
return 0;
case NM_OB_ONLABELENDEDIT:
// cast the lParam to an OUTBAR_INFO * struct; it will contain info about the edited item
// return 1 to do the change and 0 to cancel it
{
OUTBAR_INFO * pOI = (OUTBAR_INFO *) lParam;
TRACE2("Editing item %d, new text:%s\n", pOI->index, pOI->cText);
}
return 1;
case NM_OB_ONGROUPENDEDIT:
// cast the lParam to an OUTBAR_INFO * struct; it will contain info about the edited folder
// return 1 to do the change and 0 to cancel it
{
OUTBAR_INFO * pOI = (OUTBAR_INFO *) lParam;
TRACE2("Editing folder %d, new text:%s\n", pOI->index, pOI->cText);
}
return 1;
case NM_OB_DRAGITEM:
// cast the lParam to an OUTBAR_INFO * struct; it will contain info about the dragged items
// return 1 to do the change and 0 to cancel it
{
OUTBAR_INFO * pOI = (OUTBAR_INFO *) lParam;
TRACE2("Drag item %d at position %d\n", pOI->iDragFrom, pOI->iDragTo);
}
return 1;
}
return 0;
}
CDocument* CMainFrame::GetActiveDocument()
{
return (CFrameWnd::GetActiveDocument());
}
void CMainFrame::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
// TODO: Add your message handler code here and/or call default
CDocument* pDoc = GetActiveDocument();
CFrameWnd::OnKeyDown(nChar, nRepCnt, nFlags);
}
void CMainFrame::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
CTime t = CTime::GetCurrentTime();
CString str;
str.Format("%d年%d月%d日 %d:%d:%d",t.GetYear(),t.GetMonth(),t.GetDay(),
t.GetHour(),t.GetMinute(),t.GetSecond());
m_wndStatusBar.SetPaneText(2,str);
str.Format("中心频率:%fKHz; 高度:%d dm",pDoc->m_cfreq,pDoc->m_chigh);
m_wndStatusBar.SetPaneText(1,str);
m_animIcon.ShowNextImage();
CFrameWnd::OnTimer(nIDEvent);
}
void CMainFrame::OnDestroy()
{
CFrameWnd::OnDestroy();
// TODO: Add your message handler code here
if(m_timerID != 0)
KillTimer(m_timerID);
}
void CMainFrame::OnUpdateKeyShift(CCmdUI *pCmdUI)
{
pCmdUI->Enable(::GetKeyState(VK_SHIFT)<0);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -