📄 wgl_32view.cpp
字号:
// Wgl_32View.cpp : implementation file
//
#include "stdafx.h"
#include "wgl_32.h"
#include "Wgl_32View.h"
#include "prtgrp.h"
#include "PrtSlt.h"
#include "math.h"
#include "Recorder.h"
#include "Dialing.h"
#include "Trans.h"
#include "tty.h"
#include "DDCJ.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
BOOL ReadDog(void);
extern CTTY MyTTY;
CDialing MMyDialing;
CTrans MyTrans;
IMPLEMENT_DYNCREATE(CWgl_32View, CView)//CScrollView
COLORREF LRGB = RGB(0,128,255);
COLORREF RRGB = RGB(255,128,64);
const COLORREF GlobalAxialColor[5] =
{
RGB(255,255,255), RGB(0, 0, 255),RGB(255, 0, 255),
RGB(0, 255,255), RGB(128,128,0)
};
int intINT(double x)
{ return x<0.0 ? int(x-0.5) : int(x+0.5); }
/////////////////////////////////////////////////////////////////////////////
// CWgl_32View
CWgl_32View::CWgl_32View()
{
AxialPen[0].CreatePen(PS_SOLID, 1, GlobalAxialColor[0]);
AxialPen[1].CreatePen(PS_SOLID, 1, GlobalAxialColor[1]);
AxialPen[2].CreatePen(PS_SOLID, 1, GlobalAxialColor[2]);
AxialPen[3].CreatePen(PS_SOLID, 1, GlobalAxialColor[3]);
AxialPen[4].CreatePen(PS_SOLID, 1, GlobalAxialColor[4]);
LPen.CreatePen(PS_SOLID, 1, LRGB);
RPen.CreatePen(PS_SOLID, 1, RRGB);
ShortPen.CreatePen(PS_DASHDOT, 1, RRGB);
PrintIndex = NULL;
nRemaindCurve = 1;
bZoomIn = bZoomOut = TRUE;
bLButtonDown = FALSE;
bCopyArea = FALSE;
bVExpand = bVExpand = bXExpand = bEditYcursor = FALSE;
bShortSeg = bMove = bCopyCurve = bDeleteCurve = FALSE;
nSelectCurve = -1;
HOldCursor = AfxGetApp()->LoadStandardCursor(IDC_ARROW);
m_HHExpand = AfxGetApp()->LoadCursor(IDC_HEXPAND);
m_HVExpand = AfxGetApp()->LoadCursor(IDC_VEXPAND);
m_HBeforeMove = AfxGetApp()->LoadCursor(IDC_BEFORE_MOVE);
m_HMoving = AfxGetApp()->LoadCursor(IDC_MOVING);
m_HYValue = AfxGetApp()->LoadCursor(IDC_YVALUE);
bCPUShortPrint = bCPUTotalPrint = bSelectTotalPrint = bSelectShortPrint = FALSE;
}
CWgl_32View::~CWgl_32View()
{
bVExpand = FALSE;
bXExpand = FALSE;
bEditYcursor = FALSE;
bVExpand = FALSE;
bMove = FALSE;
bShortSeg = FALSE;
if(PrintIndex)
delete[] PrintIndex;
}
BOOL CWgl_32View::PreCreateWindow(CREATESTRUCT& cs)
{
cs.lpszClass =
AfxRegisterWndClass(CS_HREDRAW | CS_VREDRAW,
NULL, (HBRUSH)GetStockObject(BLACK_BRUSH));
return CView::PreCreateWindow(cs);
}
int CWgl_32View::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CView::OnCreate(lpCreateStruct) == -1)
return -1;
SetClassLong(m_hWnd,GCL_HCURSOR,(LONG)HOldCursor);
return 0;
}
BOOL CWgl_32View::Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext)
{
dwStyle = dwStyle | WS_HSCROLL | WS_VSCROLL;
return CWnd::Create(lpszClassName, lpszWindowName, dwStyle, rect, pParentWnd, nID, pContext);
}
BEGIN_MESSAGE_MAP(CWgl_32View, CView)
//{{AFX_MSG_MAP(CWgl_32View)
ON_WM_SIZE()
ON_WM_LBUTTONDOWN()
ON_WM_RBUTTONDOWN()
ON_WM_LBUTTONUP()
ON_WM_MOUSEMOVE()
ON_WM_HSCROLL()
ON_WM_VSCROLL()
ON_UPDATE_COMMAND_UI(ID_EDIT_ZOOMIN, OnUpdateEditZoomin)
ON_UPDATE_COMMAND_UI(ID_EDIT_ZOOMOUT, OnUpdateEditZoomout)
ON_UPDATE_COMMAND_UI(ID_EDIT_MOVE, OnUpdateEditMove)
ON_UPDATE_COMMAND_UI(ID_EDIT_XEXPAND, OnUpdateEditXexpand)
ON_UPDATE_COMMAND_UI(ID_EDIT_YCURSOR, OnUpdateEditYcursor)
ON_COMMAND(ID_EDIT_VEXPAND, OnEditVexpand)
ON_COMMAND(ID_EDIT_XEXPAND, OnEditXexpand)
ON_COMMAND(ID_EDIT_ZOOMIN, OnEditZoomin)
ON_COMMAND(ID_EDIT_ZOOMOUT, OnEditZoomout)
ON_COMMAND(ID_EDIT_MOVE, OnEditMove)
ON_COMMAND(ID_EDIT_YCURSOR, OnEditYcursor)
ON_COMMAND(ID_EDIT_RESTORE, OnEditRestore)
ON_COMMAND(ID_FILE_PRINT, OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_PREVIEW, OnFilePrintPreview)
ON_COMMAND(ID_FILE_PRINTSELECT, OnFilePrintselect)
ON_WM_KEYDOWN()
ON_COMMAND(ID_TRANS_SEND, OnTransSend)
ON_COMMAND(ID_ANALYSIS_SINGLE, OnAnalysisSingle)
ON_COMMAND(ID_ANALYSIS_TOTAL, OnAnalysisTotal)
ON_WM_DESTROY()
ON_UPDATE_COMMAND_UI(ID_EDIT_VEXPAND, OnUpdateEditVexpand)
ON_COMMAND(ID_SHORTSEG, OnShortseg)
ON_UPDATE_COMMAND_UI(ID_SHORTSEG, OnUpdateShortseg)
ON_COMMAND(ID_FILE_SELPRT, OnFileSelprt)
ON_COMMAND(ID_EDIT_COPYCURVE, OnEditCopyCurve)
ON_UPDATE_COMMAND_UI(ID_EDIT_COPYCURVE, OnUpdateEditCopyCurve)
ON_COMMAND(ID_EDIT_DELETE, OnEditDelete)
ON_UPDATE_COMMAND_UI(ID_EDIT_DELETE, OnUpdateEditDelete)
ON_WM_CREATE()
ON_COMMAND(ID_EDIT_COPYAREA, OnEditCopyArea)
ON_UPDATE_COMMAND_UI(ID_EDIT_COPYAREA, OnUpdateEditCopyArea)
ON_UPDATE_COMMAND_UI(ID_DELETE_SUBCURVE, OnUpdateDeleteSubCurve)
ON_COMMAND(ID_DELETE_SUBCURVE, OnDeleteSubCurve)
ON_COMMAND(ID_FILE_PRINT_DIRECT, OnFilePrint)
ON_COMMAND(ID_FILE_SHRTCPU, OnFileShrtCPU)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CWgl_32View drawing
void CWgl_32View::OnInitialUpdate()
{
CView::OnInitialUpdate();
CRect rect;
GetClientRect( &rect );
SetResynScroll( rect.right, rect.bottom );
}
BOOL CWgl_32View::IsSpecRate(unsigned long xi,WORD m_NumRates,SampRates* m_pSampRates)
{
for(WORD i=0; i<m_NumRates; i++)
if(m_pSampRates[i].EndSampNum>=xi) break;
if(m_pSampRates[i].SampRate==1.0 ||
m_pSampRates[i].SampRate==10.0 ||
m_pSampRates[i].SampRate==200.0)
return TRUE;
else
return FALSE;
}
CPen *CWgl_32View::SelectDrawAxialPen(CDC *pDC,double SampRate)
{
if(SampRate==1000.0)
return (CPen *)pDC->SelectObject(CPen::FromHandle(AxialPen[0]));
if(SampRate==200.0)
return (CPen *)pDC->SelectObject(CPen::FromHandle(AxialPen[1]));
if(SampRate==10.0)
return (CPen *)pDC->SelectObject(CPen::FromHandle(AxialPen[2]));
if(SampRate==1.0)
return (CPen *)pDC->SelectObject(CPen::FromHandle(AxialPen[3]));
return (CPen *)pDC->SelectObject(CPen::FromHandle(AxialPen[4]));
}
CPen *CWgl_32View::SelectDrawAxialPen(CDC* pDC,SampRates* pSampRates,WORD m_NumRates,unsigned long lli)
{
WORD wi=0;
while(pSampRates[wi].EndSampNum<lli && wi<m_NumRates) wi++;
return SelectDrawAxialPen(pDC,pSampRates[wi].SampRate);
}
void CWgl_32View::OnDraw(CDC* pDC)
{
CWgl_32Doc* pDoc = GetDocument();
if(pDoc->bReadError) return;
Channel* m_pChannel=pDoc->m_pChannel;
if(m_pChannel==NULL) return;
WORD NumPerView=pDoc->m_NumPerView;
WORD HalfCurveHeigh=pDoc->HalfCurveHeigh;
WORD CurveHeigh = HalfCurveHeigh*2;
CRect rect;
GetClientRect( &rect );
int xl=rect.left;
int yt=rect.top;
long **PSamplData = pDoc->PSamplData;
double *SampleIndex = pDoc->SampleIndex;
WORD m_ViewChannelMax = pDoc->m_ViewChannelMax;
WORD m_ViewChannel=pDoc->m_ViewChannel;
double m_XSizeFactor = pDoc->m_XSizeFactor;
SampRates* m_pSampRates = pDoc->m_pSampRates;
ChannelNumber *m_pChannelIndex = pDoc->m_pChannelIndex;
WORD m_NumRates = pDoc->m_NumRates;
unsigned long PageFromSampNum = pDoc->PageFromSampNum;
unsigned long EndSampNum = pDoc->EndSampNum;
int nWhichCurve = pDoc->nWhichCurve;
ShortNode *pShortNode = pDoc->m_pShortNode;
CPen *GOldPen=(CPen *)pDC->SelectObject(CPen::FromHandle(AxialPen[4]));
pDC->MoveTo(xl,0);
pDC->LineTo(xl+8,0);
int xlstart = 0;
while(pShortNode[xlstart].lend <= PageFromSampNum)
xlstart ++;
xlstart--;
BOOL bFirstDraw = TRUE;
unsigned long lle,lli;
int y,t,kl = 0;
WORD wIndex = m_ViewChannel;
CPen PenCurve;
while(wIndex <= m_ViewChannelMax && kl < NumPerView)
{
int nSubIndex = -1;
int nNumb = m_pChannelIndex[wIndex].nNumb;
WORD* pSub = m_pChannelIndex[wIndex].pSub;
WORD wChannel = m_pChannelIndex[wIndex].No;
WORD wIndexOld = wIndex;
t = HalfCurveHeigh+CurveHeigh*kl;
do
{
lli = PageFromSampNum;
int xcStart = 0;
int xlstartA = xlstart;
double xi,fy;
int& ShortNodeNum=pDoc->ShortNodeNum;
CPen *pDoPen;
if(m_pChannel[wChannel].VAD >= 0)
{
PenCurve.CreatePen(PS_SOLID,1,m_pChannelIndex[wIndex].Color);
pDoPen = (CPen *)pDC->SelectObject( &PenCurve );
}
else
pDoPen = (CPen *)pDC->SelectStockObject(WHITE_PEN);
while(xlstartA < ShortNodeNum)
{
BOOL bPrevHide = FALSE;
while(xlstartA < ShortNodeNum && pShortNode[xlstartA].bShow==0)
{
bPrevHide = TRUE;
int tw;
if(lli == pShortNode[xlstartA].lend)
tw = pDoc->ShortWidth;
else
tw = pDoc->ShortWidth/2;
if(bFirstDraw)
{
CPen *pOldPen=(CPen *)pDC->SelectObject(CPen::FromHandle(ShortPen));
pDC->MoveTo(xcStart, 0);
pDC->LineTo(xcStart, rect.bottom);
pDC->MoveTo(xcStart+tw, 0);
pDC->LineTo(xcStart+tw, rect.bottom);
pDC->SelectObject( pOldPen );
}
xcStart += tw;
xlstartA++;
lli = pShortNode[xlstartA].lend;
if(xcStart >= rect.right)
goto drawaxial;
}
if(xlstartA == ShortNodeNum)
goto drawaxial;
if(xcStart==0)
bPrevHide=TRUE;
xlstartA ++;
if(xlstartA == ShortNodeNum)
goto drawaxial;
lle = pShortNode[xlstartA].lend;
if(lle != EndSampNum) lle++;
xi = xcStart;
if(m_pChannel[wChannel].VAD >= 0)
{
double max,min;
if(m_pChannel[wChannel].VAD == 0)
{
max = pDoc->maxA;
min = pDoc->minA;
}
else
{
max = pDoc->maxV;
min = pDoc->minV;
}
double mean = 0.0;//0.5*(max+min);
double factor = max-min;
factor = m_pChannelIndex[wIndex].YFactor*CurveHeigh/factor;
double tempdbl = PSamplData[wChannel][lli];
if(tempdbl == 999999) tempdbl = 0;
fy = factor*(tempdbl-mean);
if(IsSpecRate(lli,m_NumRates,m_pSampRates))
{
pDC->MoveTo(xcStart,intINT(t+fy));
pDC->LineTo(xcStart,intINT(t-fy));
}
else
if(bPrevHide)
pDC->MoveTo(xcStart,intINT(t-fy));
else
pDC->LineTo(xcStart,intINT(t-fy));
for(unsigned long tlli=lli+1; tlli < lle; tlli++)
{
xi = xi+m_XSizeFactor;
double tempdbl = PSamplData[wChannel][tlli];
if(tempdbl == 999999) tempdbl = 0;
fy = factor*(tempdbl-mean);
if(IsSpecRate(tlli,m_NumRates,m_pSampRates))
{
pDC->MoveTo(intINT(xi),intINT(t+fy));
pDC->LineTo(intINT(xi),intINT(t-fy));
}
else
pDC->LineTo(intINT(xi),intINT(t-fy));
if(xi > rect.right)
goto drawaxial;
}
} //if(m_pChannel[wChannel].VAD >= 0)
else
{
double factor = 2.0;
factor = m_pChannelIndex[wIndex].YFactor*HalfCurveHeigh/factor;
double tempdbl = PSamplData[wChannel][lli];
if(tempdbl == 999999) tempdbl = 0;
fy = factor*tempdbl;
if(bPrevHide)
pDC->MoveTo(xcStart,intINT(t-fy));
else
pDC->LineTo(xcStart,intINT(t-fy));
for(unsigned long tlli=lli+1; tlli < lle; tlli++)
{
xi = xi+m_XSizeFactor;
tempdbl = PSamplData[wChannel][tlli];
if(tempdbl == 999999) tempdbl = 0;
fy = factor*tempdbl;
pDC->LineTo(intINT(xi), intINT(t-fy));
if(xi > rect.right)
goto drawaxial;
}
}
drawaxial:
if(nSubIndex<0)
{
double xxi = xcStart;
pDC->MoveTo(xcStart,t);
for(lli = lli+1; lli < lle; lli++)
{
xxi = xxi+m_XSizeFactor;
CPen *Pen = SelectDrawAxialPen(pDC,m_pSampRates,m_NumRates,lli);
pDC->LineTo(intINT(xxi),t);
pDC->SelectObject( Pen );
if(xxi > rect.right) break;
}
pDC->MoveTo(intINT(xi),intINT(t-fy));
} // end if(nSubIndex<0)
lli = pShortNode[xlstartA].lend;
xcStart = intINT(xi);
} // end while(xlstartA < ShortNodeNum)
pDC->SelectObject( pDoPen );
PenCurve.DeleteObject();
nSubIndex++;
if( pSub )
{
wChannel = pSub[nSubIndex];
wIndex = GetCurveNumberIndex(wChannel);
}
} while(nSubIndex < nNumb);
pDC->SelectObject(CPen::FromHandle(AxialPen[4]));
pDC->MoveTo(xl,t+HalfCurveHeigh);
pDC->LineTo(xl+8,t+HalfCurveHeigh);
bFirstDraw = FALSE;
wIndex = wIndexOld;
wIndex++;
while(wIndex < m_ViewChannelMax && m_pChannelIndex[wIndex].bShow==0)
wIndex++;
kl++;
} // end of draw display curve
kl = 0;
wIndex = m_ViewChannel;
int DrawMode = pDC->SetROP2(R2_XORPEN);
if(nWhichCurve>0) // draw y cursor two lines
while(wIndex <= m_ViewChannelMax && kl < NumPerView)
{
if(m_pChannelIndex[wIndex].bShow==0)
{
wIndex++;
continue;
}
wIndex++; kl++;
WORD wChannel=m_pChannelIndex[wIndex].No;
if(nWhichCurve==wChannel && m_pChannelIndex[wIndex].bShow)
{
t = HalfCurveHeigh+CurveHeigh*(wIndex-m_ViewChannel);
double max,min;
if(m_pChannel[wChannel].VAD==0)
{
max = pDoc->maxA;
min = pDoc->minA;
}
else
{
max = pDoc->maxV;
min = pDoc->minV;
}
double mean = 0.0;//0.5*(max+min);
double factor = max-min;
factor=m_pChannelIndex[wChannel].YFactor*CurveHeigh/factor;
pDC->SelectObject(CPen::FromHandle(LPen));
double fy = factor*(pDoc->LCursorA-mean);
pDC->MoveTo(0, intINT(t-fy));
pDC->LineTo(rect.right, intINT(t-fy));
fy = factor*(pDoc->RCursorA-mean);
pDC->SelectObject(CPen::FromHandle(RPen));
pDC->MoveTo(0, intINT(t-fy));
pDC->LineTo(rect.right, intINT(t-fy));
}
}
lle = pDoc->LCursor;
if(lle >= PageFromSampNum && lle <= lli)
{
pDC->SelectObject(CPen::FromHandle(LPen));
pDoc->GetHNumPosit(xlstart,lle);
pDC->MoveTo(xlstart, 0);
pDC->LineTo(xlstart, rect.bottom);
}
lle = pDoc->RCursor;
if(lle >= PageFromSampNum && lle <= lli)
{
pDoc->GetHNumPosit(xlstart,lle);
pDC->SelectObject(CPen::FromHandle(RPen));
pDC->MoveTo(xlstart, 0);
pDC->LineTo(xlstart, rect.bottom);
}
if(nSelectCurve>=0)
{
y = GetCurveDisplayIndex(nSelectCurve);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -