📄 cgeview.cpp
字号:
// cgeView.cpp : implementation of the CCgeView class
//
#include "stdafx.h"
#include "cge.h"
#include "MainFrm.h"
#include "cgeDoc.h"
#include "cgeView.h"
#include "math.h"
#include "resource.h"
#include "MyLine.h"
#include "NewFile.h"
#include "FilePath.h"
#include <direct.h>
#include "FFT.h"
#include "SinDia.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CCgeView
IMPLEMENT_DYNCREATE(CCgeView, CScrollView)
BEGIN_MESSAGE_MAP(CCgeView, CScrollView)
ON_WM_CONTEXTMENU()
//{{AFX_MSG_MAP(CCgeView)
ON_WM_CREATE()
ON_WM_MOUSEMOVE()
ON_COMMAND(ID_XIANSHI4, OnXianshi4)
ON_COMMAND(ID_XIANSHI5, OnXianshi5)
ON_COMMAND(ID_XIANSHI6, OnXianshi6)
ON_COMMAND(ID_XIANSHI9, OnXianshi9)
ON_COMMAND(ID_GONGJV1, OnGongjv1)
ON_COMMAND(ID_VIEWGDSB, OnViewgdsb)
ON_COMMAND(ID_VIEWGDTLCR, OnViewgdtlcr)
ON_COMMAND(ID_XIANSHI_DTLCR, OnXianshiDtlcr)
ON_WM_LBUTTONDOWN()
ON_COMMAND(ID_EDIT_RESET, OnEditReset)
ON_UPDATE_COMMAND_UI(ID_EDIT_RESET, OnUpdateEditReset)
ON_UPDATE_COMMAND_UI(ID_VIEWGDSB, OnUpdateViewgdsb)
ON_COMMAND(ID_XIANSHI1, OnXianshi1)
ON_WM_HSCROLL()
ON_CBN_SELCHANGE(IDC_DLGBARCOMBO1, OnSelchangeDlgbarcombo1)
ON_COMMAND(ID_START_LINE, OnStartLine)
ON_UPDATE_COMMAND_UI(ID_START_LINE, OnUpdateStartLine)
ON_COMMAND(ID_END_LINE, OnEndLine)
ON_UPDATE_COMMAND_UI(ID_END_LINE, OnUpdateEndLine)
ON_COMMAND(ID_INVERT, OnInvert)
ON_UPDATE_COMMAND_UI(ID_INVERT, OnUpdateInvert)
ON_UPDATE_COMMAND_UI(ID_VIEW_HSTRETCH, OnUpdateViewHstretch)
ON_COMMAND(ID_TIMELABEL, OnTimelabel)
ON_UPDATE_COMMAND_UI(ID_TIMELABEL, OnUpdateTimelabel)
ON_COMMAND(ID_CUT_HEAD, OnCutHead)
ON_UPDATE_COMMAND_UI(ID_CUT_HEAD, OnUpdateCutHead)
ON_COMMAND(ID_CUT_SCALE, OnCutScale)
ON_UPDATE_COMMAND_UI(ID_CUT_SCALE, OnUpdateCutScale)
ON_COMMAND(ID_PARFILE, OnParfile)
ON_CBN_SELCHANGE(IDC_COMBO1, OnSelchangeCombo1)
ON_COMMAND(ID_S_FANG, OnSFang)
ON_UPDATE_COMMAND_UI(ID_S_FANG, OnUpdateSFang)
ON_COMMAND(ID_SHOW_BASLINEKEY, OnShowBaslinekey)
ON_UPDATE_COMMAND_UI(ID_SHOW_BASLINEKEY, OnUpdateShowBaslinekey)
ON_WM_VSCROLL()
ON_WM_DESTROY()
ON_COMMAND(ID_PARA_NEW, OnParRfile)
ON_COMMAND(ID_FILE_NEW, OnFileNew)
ON_COMMAND(ID_JUXING, OnJuxing)
ON_COMMAND(ID_XUEBO, OnXuebo)
ON_UPDATE_COMMAND_UI(ID_XUEBO, OnUpdateXuebo)
//}}AFX_MSG_MAP
// Standard printing commands
ON_COMMAND(ID_FILE_PRINT, CScrollView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_DIRECT, CScrollView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_PREVIEW, CScrollView::OnFilePrintPreview)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CCgeView construction/destruction
CCgeView::CCgeView()
{
scrollkey=false;
checkup=0;
checkdown=0;
m_SBKey = true;
}
CCgeView::~CCgeView()
{
CCgeDoc *pDoc = (CCgeDoc *)GetDocument();
if(!pDoc->m_CMyLineList.IsEmpty())
{
//m_CMyLineList.RemoveAll();// CAge's aren't destroyed.
//ASSERT(m_CMyLineList.IsEmpty()); // Yes it is.
CMyLine *pMyLine;
POSITION ps;
ps = pDoc->m_CMyLineList.GetHeadPosition();
while ( ps != NULL )
{
pMyLine = (CMyLine *)pDoc->m_CMyLineList.GetNext(ps);
delete pMyLine; // Now delete the CAge objects.
}
pDoc->m_CMyLineList.RemoveAll();// CAge's aren't destroyed.
ASSERT(pDoc->m_CMyLineList.IsEmpty()); // Yes it is.
}
}
BOOL CCgeView::PreCreateWindow(CREATESTRUCT& cs)
{
return CScrollView::PreCreateWindow(cs);
}
/////////////////////////////////////////////////////////////////////////////
// CCgeView drawing
/* LL
void CCgeView::OnDraw(CDC* pDC)
{
CCgeDoc* pDoc = (CCgeDoc* )GetDocument();
ASSERT_VALID(pDoc);
GetClientRect(&m_viewrect); //???
//GetClientRect(&(pDoc->ViewRect));
pDoc->ViewRect = m_viewrect;
//pDC->LineTo(Rect.right ,Rect.bottom);
CPen NewPen;
CPen* pOldPen;
CBrush NewBrush;
CBrush* pOldBrush;
CMainFrame* pFrame = (CMainFrame* ) AfxGetApp()->m_pMainWnd;
NewPen.CreatePen(PS_SOLID,1,m_LineCr);
pOldPen = pDC->SelectObject(&NewPen);
pDC->SetBkColor(m_TextBkCr);
pDC->SetTextColor(m_TextCr);
CBrush NewBrush;
CBrush* pOldBrush;
NewBrush.CreateSolidBrush( m_ViewBkCr ); //实心底
//NewBrush.CreateHatchBrush( HS_CROSS,m_ViewBkCr ); //网格底
pOldBrush = pDC->SelectObject(&NewBrush);
OnEditReset() ;
SetScrollSizes(MM_TEXT, pDoc->m_xyAxisSize);//set scrollbar size
CString s;
s.Format("%4d",pDoc->m_Ndb*6 ); //分贝
//s.Format("%4.0f",pDoc->m_stepY*6.0/m_stepY0 ); //分贝
pDLGBAR->GetDlgItem(IDC_DLGBAREDIT1)->SetWindowText(s);
//s.Format("%4.0f", pDoc->m_stepX );
s.Format("%4d", pDoc->m_H );
pDLGBAR->GetDlgItem(IDC_DLGBAREDIT2)->SetWindowText(s);
pCombo1 = (CComboBox* )pDLGBAR->GetDlgItem(IDC_COMBO1);
pCombo1->ResetContent();
pCombo1->AddString(pDoc->s[0]);
int i,bd,ed;
CString bes;
i = pDoc->s[0].Find("-");
bd = atoi(pDoc->s[0].Left(i));
ed = atoi(pDoc->s[0].Mid(i+1));
for(i=bd;i<ed+1;i++)
{
bes.Format("%d",i);
pCombo1->AddString(bes);
}
pDLGBAR->GetDlgItem(IDC_COMBO1)->SetWindowText(pDoc->Fangs);
//bes.Format("%3d",pDoc->m_Mcishu);
//pDLGBAR->GetDlgItem(IDC_DCISHU)->SetWindowText(bes);
//调用画线函数
if(!pDoc->m_CMyLineList.IsEmpty() && baslineKey)
{
DrawBasLine(pDoc, pDC);
}
if(!pDoc->m_CMyLineList.IsEmpty() ) //&& !pDoc->fullScreen)
{
pDoc->DrawLine(pDC);
}
if( TimelabelKey )
{
DrawTimeStep(pDoc, pDC);
}
//DrawScale(pDC,pDoc); //在CView中画水平标尺
//pDoc->DrawLine(pDC);
dBPoint.x = -1000;//关闭再显滚动轴
// pDC->SelectObject(pOldPen);
// pDC->SelectObject(pOldBrush);
//测试
CString sc;
sc.Format("%f",pDoc->m_stepY);
pDC->TextOut (200,100,sc);
//测试
sc.Format("%d",pDoc->ViewRect.right);
pDC->TextOut (200,200,sc);
//测试
sc.Format("%d",m_viewrect.right);
pDC->TextOut (200,300,sc);
//测试
sc.Format("%d", pDoc->m_viewY0);
pDC->TextOut (300,400,sc);
//if(m_fillKey && !scrollkey)//修改如下 fill(up);
if(m_fillKey)
{
m_fill(up); //Release
}
//ReleaseDC(pDoc);
//pDC->ReleaseDC(pOldPen);
//ReleaseObject(pOldBrush);
} //end view
*/
void CCgeView::OnDraw(CDC* pDC)
{
CCgeDoc* pDoc = (CCgeDoc* )GetDocument();
ASSERT_VALID(pDoc);
//GetClientRect(&(pDoc->ViewRect));//m412
m_nFlowXY = -55;
L_Draw(pDC);
if( TimelabelKey )
{
DrawTimeStep(pDoc, pDC);
}
//pDC->TextOut (20,50,"afadsf");
}
void CCgeView::L_Draw(CDC *pDC)
{
CCgeDoc *pDoc = GetDocument();
if(!pDoc->m_CMyLineList.IsEmpty())
{
CRect rect;
GetClientRect(&rect);
pDoc->ViewRect = rect;
CMyLine* pMyLine;
pDC->DPtoLP(&rect);
pDoc->m_ViewLeft = rect.left;
int x,y;
int n = rect.top - pDoc->m_viewY0;//重画视窗
int start = n/pDoc->basline;
if(start<0)
start = 0;
//int end = (n + rect.Height())/pDoc->basline + 2;
CBrush NewBrush;
CBrush* pOldBrush;
NewBrush.CreateSolidBrush( m_ViewBkCr ); //实心底
//NewBrush.CreateHatchBrush( HS_CROSS,m_ViewBkCr ); //网格底
pOldBrush = pDC->SelectObject(&NewBrush);
pDC->FillRect(&rect,&NewBrush);
NewBrush.DeleteObject ();
if(!pDoc->m_CMyLineList.IsEmpty() && baslineKey)
{
DrawBasLine(pDoc, pDC);
}
POSITION pos = pDoc->m_CMyLineList.GetHeadPosition();
CPen pen;
pen.CreatePen(PS_SOLID, 1, m_LineCr);//线与填充
CPen* pold = pDC->SelectObject(&pen);
BOOL Draw_T = false;
int Draw_i;
if(pDoc->Fangs==pDoc->s[0] ) Draw_T = true;
Draw_i = atoi(pDoc->Fangs)-1;
//ENp = Num_Pointes;
//for(int i = start;i < end && i < pDoc->Num_Line;i++)
//m82
float basline_y;
for(int i = 0; i < pDoc->Num_Line;i++)
{
pMyLine = (CMyLine* )pDoc->m_CMyLineList.GetNext(pos);
x = 0;
//y = pMyLine->y * pDoc->m_stepY + i * pDoc->basline + pDoc->m_viewY0;
//m82
basline_y = pMyLine->y * pDoc->m_stepY;
if(m_SBKey)
{
if(basline_y >= 0.8 * pDoc->basline )
{
basline_y = 0.8 * pDoc->basline;
}
if( basline_y <= -0.8 * pDoc->basline )
{
basline_y = -0.8 * pDoc->basline;
}
}
y = basline_y + i * pDoc->basline + pDoc->m_viewY0;
if(i == start)
{
pDoc->m_FirstBase = i * pDoc->basline + pDoc->m_viewY0 - rect.top;
pDoc->m_nCurChannel = i;
pDoc->UpdateView();
}
pDC->MoveTo(x ,y);
// if(FangsKey)
// {
// pDC->LineTo(pDoc->GetDocSize().cx, y);
// pDC->MoveTo(x ,y);
// }
for(int j = 1;j < pDoc->Num_Pointes;j++)
{
pMyLine = (CMyLine* )pDoc->m_CMyLineList.GetNext(pos);
x = j * pDoc->m_stepX;
//m82
basline_y = pMyLine->y * pDoc->m_stepY;
if(m_SBKey)
{
if(basline_y >= 0.8 * pDoc->basline )
{
basline_y = 0.8 * pDoc->basline;
}
if( basline_y <= -0.8 * pDoc->basline )
{
basline_y = -0.8 * pDoc->basline;
}
}
y = basline_y + i * pDoc->basline + pDoc->m_viewY0;
//m82
if(Draw_T)
{
y = basline_y + i * pDoc->basline + pDoc->m_viewY0;
}else if(i == Draw_i)
{
y = basline_y + i * pDoc->basline + pDoc->m_viewY0;
//单放其他道时,所有通道回到原来状态
}else
{
y = pMyLine->y * pDoc->old_m_stepY + i * pDoc->basline + pDoc->m_viewY0;
}
//m82
pDC->LineTo(x, y);
//if(j%2 != 0 && (pDoc->m_Fill == 1 && pMyLine->y <= 0 || pDoc->m_Fill == 2 && pMyLine->y >= 0))
if((pDoc->m_Fill == 1 && pMyLine->y <= 0 || pDoc->m_Fill == 2 && pMyLine->y >= 0))
{
pDC->SelectStockObject(BLACK_PEN);//填充是黑色
pDC->MoveTo(x, i* pDoc->basline + pDoc->m_viewY0);
pDC->LineTo(x, y);
pDC->SelectObject(&pen);
}
}
}
//if( TimelabelKey )
//{
// DrawTimeStep(pDoc, pDC);
//}
pDC->SelectObject(pold);
pen.DeleteObject();
}
}
void CCgeView::OnInitialUpdate()
{
/*GetDC()->SetViewportExt(10,10);
SetScrollSizes( MM_TEXT, pDoc->m_xyAxisSize );
ResizeParentToFit( ); // Default bShrinkOnly argument
注:该函数的调用有如下情况(可以在此初始化部分视窗类的数据)
1. 用户启动应用程序时
2. 选择 File 菜单中的 New 选项时
3. 选择 File 菜单中的 Open 选项时
然后自动调用OnDraw()函数
*/
CScrollView::OnInitialUpdate();
CCgeDoc* pDoc = (CCgeDoc* )GetDocument();
ASSERT_VALID(pDoc);
SetScrollSizes(MM_TEXT, pDoc->GetDocSize(), CSize(500*pDoc->m_stepX,pDoc->basline), CSize(50*pDoc->m_stepX,pDoc->basline));
m_nFlowXY = -55;
//mm
/* CClientDC dc(this);
memDC.CreateCompatibleDC(&dc);
CBitmap bm;
bm.CreateCompatibleBitmap(GetDC(), 50, 20);
memDC.SelectObject(&bm); */
pSB = (CStatusBar* )AfxGetApp()->m_pMainWnd->GetDescendantWindow(AFX_IDW_STATUS_BAR);
pDLGBAR = (CDialogBar* )AfxGetApp()->m_pMainWnd->GetDescendantWindow(CG_ID_VIEW_MYDIALOGBAR);
//pDLGBAR->GetDlgItem(IDC_DLGBARUSORMS)->SetWindowText(" "+pDoc->s[4].Right(2));
pDLGBAR->GetDlgItem(IDC_DLGBARUSORMS)->SetWindowText(" ms");
//((CMainFrame*)GetParentFrame())->GetDlgBar().GetDlgItem(IDC_DLGBAREDIT1)->SetWindowText(s);
pDoc->Fangs = pDoc->s[0];
//memDC.DeleteDC();
// pCombo1 = (CComboBox* )pDLGBAR->GetDlgItem(IDC_COMBO1);
//pCombo1->ResetContent();
//pCombo1->AddString("1-2");
//CMainFrame *p = (CMainFrame *)AfxGetApp()->m_pMainWnd;
// p->m_hvbil = 9;
// TRACE("\n%d\n",p->m_hvbil);
//HWND FindWindow(
//LPCTSTR lpClassName, // pointer to class name
//LPCTSTR lpWindowName // pointer to window name
//);
}
/////////////////////////////////////////////////////////////////////////////
// CCgeView printing
BOOL CCgeView::OnPreparePrinting(CPrintInfo* pInfo)
{
// default preparation
return DoPreparePrinting(pInfo);
}
void CCgeView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
}
void CCgeView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
}
/////////////////////////////////////////////////////////////////////////////
// CCgeView diagnostics
#ifdef _DEBUG
void CCgeView::AssertValid() const
{
CScrollView::AssertValid();
}
void CCgeView::Dump(CDumpContext& dc) const
{
CScrollView::Dump(dc);
}
CCgeDoc* CCgeView::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CCgeDoc)));
return (CCgeDoc*)m_pDocument;
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CCgeView message handlers
int CCgeView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CScrollView::OnCreate(lpCreateStruct) == -1)
return -1;
m_TextCr = RGB(0,0,0);
m_TextBkCr = 16776960;//RGB(0,0,0);青色
m_ViewBkCr = RGB(255,255,255);
//m_LineCr = 16711935;//RGB(0,0,0);//粉红色
m_LineCr = RGB(0,0,0);//黑色
//m_baslineCr = m_LineCr;
//16711935;//粉红色
//m_xyAxisSize.cx = m_xyAxisSize.cy = 900;
//m_xyAxisSize.cx = 1900;
m_fillKey = false;
m_dtlCr = RGB(0,255,0);
m_gdlCr = 0x0000ff00;
m_dtlBKey = false; //what mean
m_dtlEKey = false;//what mean
m_invertKey = false;
m_drawgdtlKey = false;// what mean
m_isdtlKey = false;// what mean
TimelabelKey = false;
baslineKey = true;
up = true;
// m_viewX0 = 20;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -