📄 childfrm.cpp
字号:
// ChildFrm.cpp : CChildFrame 类的实现
//
#include "stdafx.h"
#include "WspProcess.h"
#include "ChildFrm.h"
#include "EachItemDoc.h"
#include "CurveView.h"
#include "SuperView.h"
#include "SelectCurveDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
// CChildFrame
IMPLEMENT_DYNCREATE(CChildFrame, CMDIChildWnd)
BEGIN_MESSAGE_MAP(CChildFrame, CMDIChildWnd)
ON_WM_TIMER()
// ON_COMMAND(ID_START, OnStart)
// ON_UPDATE_COMMAND_UI(ID_START, OnUpdateStartUI)
// ON_COMMAND(ID_STOP, OnStop)
// ON_UPDATE_COMMAND_UI(ID_STOP, OnUpdateStopUI)
ON_COMMAND(ID_EDITSPLINECURVE, OnEditSplineCurve)
ON_UPDATE_COMMAND_UI(ID_EDITSPLINECURVE, OnUpdateEditSplineCurveUI)
ON_COMMAND(ID_XAXIS, OnXAdjust)
ON_UPDATE_COMMAND_UI(ID_XAXIS, OnUpdateXAdjustUI)
ON_COMMAND(ID_YAXIS, OnYAdjust)
ON_UPDATE_COMMAND_UI(ID_YAXIS, OnUpdateXAdjustUI)
ON_COMMAND(ID_SKETCH, OnSketch)
ON_UPDATE_COMMAND_UI(ID_SKETCH, OnUpdateSketchUI)
ON_WM_CREATE()
END_MESSAGE_MAP()
// CChildFrame 构造/销毁
CChildFrame::CChildFrame()
{
// TODO:在此添加成员初始化代码
}
CChildFrame::~CChildFrame()
{
}
BOOL CChildFrame::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: 在此处通过修改 CREATESTRUCT cs 来修改窗口类或样式
if( !CMDIChildWnd::PreCreateWindow(cs) )
return FALSE;
return TRUE;
}
// CChildFrame 诊断
#ifdef _DEBUG
void CChildFrame::AssertValid() const
{
CMDIChildWnd::AssertValid();
}
void CChildFrame::Dump(CDumpContext& dc) const
{
CMDIChildWnd::Dump(dc);
}
#endif //_DEBUG
// CChildFrame 消息处理程序
BOOL CChildFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
{
CRect rect;
GetClientRect(&rect);
CSize size = rect.Size();
size.cy = size.cy * 2 / 3;
if (! m_wndSplitter.CreateStatic(this, 2, 1) ||
! m_wndSplitter.CreateView(0, 0, RUNTIME_CLASS(CCurveView), size, pContext) ||
! m_wndSplitter.CreateView(1, 0, RUNTIME_CLASS(CSuperView), size, pContext))
return FALSE;
m_wndSplitter.SetActivePane(0, 0);
return TRUE;
}
void CChildFrame::OnTimer(UINT nIDEvent)
{
/* if (nIDEvent == 1)
{
srand((unsigned)time( NULL ));
int t1 = 50 + rand() % 37;
static int t2 = 0;
t2 = (t2 + 5) % 360;
double theta = PiV * t2 / ConstV;
SPLINEDATA tempData = {(double)((t1 + 111 * (int)(sin(theta))) % 100 )};
((CCurveView*)m_wndSplitter.GetPane(0, 0))->GetDocument()->receive((t1 % 2), tempData);
}*/
CMDIChildWnd::OnTimer(nIDEvent);
}
/*
void CChildFrame::OnStart()
{
CRealTime *pGraph = &(((CCurveView*)m_wndSplitter.GetPane(0, 0))->GetDocument()->m_graph);
pGraph->RestoreRealDraw();
SetTimer(1, 200, NULL);
}
void CChildFrame::OnUpdateStartUI(CCmdUI* pCmdUI)
{
CRealTime *pGraph = &(((CCurveView*)m_wndSplitter.GetPane(0, 0))->GetDocument()->m_graph);
pCmdUI->Enable(! pGraph->m_bRealTime);
}
void CChildFrame::OnStop()
{
KillTimer(1);
CRealTime *pGraph = &(((CCurveView*)m_wndSplitter.GetPane(0, 0))->GetDocument()->m_graph);
pGraph->EndRealDraw();
CScrollBar *pXScrollBar = &(((CCurveView*)m_wndSplitter.GetPane(0, 0))->m_xScrollBar);
CScrollBar *pYScrollBar = &(((CCurveView*)m_wndSplitter.GetPane(0, 0))->m_yScrollBar);
int nMin, nMax;
nMin = pGraph->m_nXTicks;
nMax = pGraph->m_nPage * pGraph->m_nXTicks + pGraph->m_nTick;
if(nMax > nMin)
{
pXScrollBar->SetScrollRange(nMin, nMax);
pXScrollBar->SetScrollPos(nMax);
}
else
{
pXScrollBar->EnableWindow(FALSE);
}
pYScrollBar->EnableWindow(TRUE);
}
void CChildFrame::OnUpdateStopUI(CCmdUI* pCmdUI)
{
CRealTime *pGraph = &(((CCurveView*)m_wndSplitter.GetPane(0, 0))->GetDocument()->m_graph);
pCmdUI->Enable( pGraph->m_bRealTime);
}
*/
void CChildFrame::OnEditSplineCurve()
{
CCurveView *pCurveView = (CCurveView*)m_wndSplitter.GetPane(0, 0);
CRealTime *pGraph = &(pCurveView->GetDocument()->m_graph);
CSelectCurveDlg dlg;
dlg.m_nCurve = pGraph->GetEditCurve() + 1;
dlg.pGraph = pGraph;
if(dlg.DoModal() == IDOK)
pGraph->SetEditCurve(dlg.m_nCurve - 1);
CClientDC dc(pCurveView);
pGraph->RefreshGraph(&dc);
// pGraph->m_redrawFlag = false;
}
void CChildFrame::OnUpdateEditSplineCurveUI(CCmdUI* pCmdUI)
{
CRealTime *pGraph = &(((CCurveView*)m_wndSplitter.GetPane(0, 0))->GetDocument()->m_graph);
pCmdUI->Enable(! (pGraph->m_bRealTime || pGraph->IsNull()));
}
void CChildFrame::OnXAdjust()
{
CString str;
str = m_wndToolBar.GetXSelection();
// double dXScale = atof(str);
double dXScale;
if(! sscanf(str, "%lf", &dXScale))
return;
if(dXScale >= 0.001)
{
if((int)dXScale == dXScale)
str.Format("%d", (int)dXScale);
else
str.Format("%.3lf", dXScale);
m_wndToolBar.SetXSelection(str);
CCurveView *pCurveView = (CCurveView*)m_wndSplitter.GetPane(0, 0);
CRealTime *pGraph = &(pCurveView->GetDocument()->m_graph);
dXScale = (int)(dXScale / 0.001) * 0.001;
int nMin, nMax, nPos;
pCurveView->m_xScrollBar.GetScrollRange(&nMin, &nMax);
pGraph->AdjustXSetting(dXScale, nMax, nPos);
CRect rect;
CClientDC dc(pCurveView);
pCurveView->GetClientRect(rect);
pGraph->DoPrepare(&dc,rect);
pGraph->RefreshGraph(&dc);
pGraph->m_redrawFlag = false;
pCurveView->m_xScrollBar.SetScrollRange(nMin, nMax);
pCurveView->m_xScrollBar.SetScrollPos(nPos);
if(nMax == nMin)pCurveView->m_xScrollBar.EnableWindow(FALSE);
}
}
void CChildFrame::OnUpdateXAdjustUI(CCmdUI* pCmdUI)
{
CRealTime *pGraph = &(((CCurveView*)m_wndSplitter.GetPane(0, 0))->GetDocument()->m_graph);
pCmdUI->Enable(! pGraph->m_bRealTime);
}
void CChildFrame::OnYAdjust()
{
CString str;
str = m_wndToolBar.GetYSelection();
// double dYScale = atof(str);
double dYScale;
if(! sscanf(str, "%lf", &dYScale))
return;
if(dYScale >= 0.01)
{
if((int)dYScale == dYScale)
str.Format("%d", (int)dYScale);
else
str.Format("%.2lf", dYScale);
m_wndToolBar.SetYSelection(str);
CCurveView *pCurveView = (CCurveView*)m_wndSplitter.GetPane(0, 0);
CRealTime *pGraph = &(pCurveView->GetDocument()->m_graph);
pGraph->AdjustYSetting(dYScale);
CRect rect;
CClientDC dc(pCurveView);
pCurveView->GetClientRect(rect);
pGraph->DoPrepare(&dc,rect);
pGraph->RefreshGraph(&dc);
pGraph->m_redrawFlag = false;
int nPages = pGraph->m_nYPages;
int nPan = pGraph->m_nYTicks;
pCurveView->m_yScrollBar.SetScrollPos(nPan * (nPages - nPages / 2));
}
}
void CChildFrame::OnUpdateYAdjustUI(CCmdUI* pCmdUI)
{
CRealTime *pGraph = &(((CCurveView*)m_wndSplitter.GetPane(0, 0))->GetDocument()->m_graph);
pCmdUI->Enable(! pGraph->m_bRealTime );
}
void CChildFrame::OnSketch()
{
CCurveView *pCurveView = (CCurveView*)m_wndSplitter.GetPane(0, 0);
CRealTime *pGraph = &(pCurveView->GetDocument()->m_graph);
if(! pGraph->IsNull())
{
double XUnits, YUnits;
pGraph->PrepareSketch(XUnits, YUnits);
CRect rect;
CClientDC dc(pCurveView);
pCurveView->GetClientRect(rect);
pGraph->DoPrepare(&dc,rect);
pGraph->RefreshGraph(&dc);
pGraph->m_redrawFlag = false;
pCurveView->m_xScrollBar.SetScrollRange(pGraph->m_nXTicks, pGraph->m_nXTicks);
pCurveView->m_xScrollBar.SetScrollPos(pGraph->m_nXTicks);
int nPages = pGraph->m_nYPages;
int nPan = pGraph->m_nYTicks;
pCurveView->m_yScrollBar.SetScrollPos(nPan * (nPages - nPages / 2));
pCurveView->m_xScrollBar.EnableWindow(FALSE);
pCurveView->m_yScrollBar.EnableWindow(FALSE);
CString str;
str.Format("%0.2f", XUnits);
m_wndToolBar.SetXSelection(str);
str.Format("%0.2f", YUnits);
m_wndToolBar.SetYSelection(str);
}
}
void CChildFrame::OnUpdateSketchUI(CCmdUI* pCmdUI)
{
CRealTime *pGraph = &(((CCurveView*)m_wndSplitter.GetPane(0, 0))->GetDocument()->m_graph);
pCmdUI->Enable(!(pGraph->m_bRealTime || pGraph->IsNull()));
}
int CChildFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CMDIChildWnd::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.LoadToolBarEx(IDR_CURVEGRAPH))
{
TRACE0("未能创建工具栏\n");
return -1; // 未能创建
}
// TODO: 如果不需要工具栏可停靠,则删除这三行
m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
EnableDocking(CBRS_ALIGN_ANY);
DockControlBar(&m_wndToolBar);
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -