📄 wgl_32view.cpp
字号:
dc.MoveTo(xpos,0);
dc.LineTo(xpos,rect.bottom);
CursorOld = RCursor;
if(RCursor > 0) RCursor = RCursor-1;
RCursor = max(PageFromSampNum, RCursor);
pDoc->AdjustSampIndex(RCursor,FALSE);
pDoc->GetHNumPosit(xpos,RCursor);
dc.MoveTo(xpos,0);
dc.LineTo(xpos,rect.bottom);
dc.SelectObject( OldPen );
dc.SetROP2( DrawMode );
if(CursorOld != RCursor)
pDoc->UpdateAllViews( this );
break;
case VK_DOWN:
OldPen = (CPen *)dc.SelectObject( &RPen );
DrawMode = dc.SetROP2(R2_XORPEN);
pDoc->GetHNumPosit(xpos,RCursor);
dc.MoveTo(xpos,0);
dc.LineTo(xpos,rect.bottom);
CursorOld = RCursor;
RCursor = RCursor+1;
RCursor = min(EndSampNum, RCursor);
pDoc->AdjustSampIndex(RCursor,TRUE);
pDoc->GetHNumPosit(xpos,RCursor);
dc.MoveTo(xpos,0);
dc.LineTo(xpos,rect.bottom);
dc.SelectObject( OldPen );
dc.SetROP2( DrawMode );
if(CursorOld != RCursor)
pDoc->UpdateAllViews( this );
break;
}
}
void CWgl_32View::OnLButtonDown(UINT nFlags, CPoint point)
{
CWgl_32Doc *pDoc = GetDocument();
if(pDoc->bReadError) return;
ChannelNumber *m_pChannelIndex = pDoc->m_pChannelIndex;
WORD HalfCurveHeigh=pDoc->HalfCurveHeigh;
WORD CurveHeigh=HalfCurveHeigh*2;
CClientDC dc(this);
CRect rect;
GetClientRect( &rect );
if(bCopyCurve)
{
int kk;
int Selected = GetCurveNumber( point );
if(Selected < 0) return;
if(nSelectCurve < 0) {
nSelectCurve = Selected;
kk = GetCurveDisplayIndex(nSelectCurve);
rect.top = kk*CurveHeigh;
rect.bottom = rect.top+CurveHeigh;
dc.InvertRect( &rect );
SetClassLong(m_hWnd, GCL_HCURSOR, (LONG)m_HMoving);
return;
}
kk = GetCurveNumberIndex(Selected);
if(pDoc->CopyChannelInform( kk, nSelectCurve ))
{
InvalidateRect( NULL );
pDoc->UpdateView( TRUE, FALSE );
}
SetClassLong(m_hWnd, GCL_HCURSOR, (LONG)HOldCursor);
bCopyCurve = FALSE;
nSelectCurve = -1;
return;
}
if(bDeleteCurve)
{
int Selected = GetCurveNumber( point );
if(Selected < 0) return;
Selected = GetCurveNumberIndex(Selected);
if(pDoc->DeltChannelInform( Selected ))
{
SetResynScroll(rect.right,rect.bottom);
InvalidateRect( NULL );
pDoc->UpdateView( TRUE, FALSE );
}
bDeleteCurve = FALSE;
SetClassLong(m_hWnd, GCL_HCURSOR, (LONG)HOldCursor);
return;
}
if(bMove)
{
int kl,kk;
int Selected = GetCurveNumber( point );
if(Selected < 0) return;
if(nSelectCurve < 0) {
nSelectCurve = Selected;
kl = GetCurveDisplayIndex(nSelectCurve);
rect.top = kl*CurveHeigh;
rect.bottom = rect.top+CurveHeigh;
dc.InvertRect( &rect );
SetClassLong(m_hWnd, GCL_HCURSOR, (LONG)m_HMoving);
return;
}
kl = GetCurveNumberIndex(Selected);
kk = GetCurveNumberIndex(nSelectCurve);
pDoc->SwapChannelInform( kl, kk );
SetClassLong(m_hWnd, GCL_HCURSOR, (LONG)HOldCursor);
bMove = FALSE;
nSelectCurve = -1;
InvalidateRect( NULL );
pDoc->UpdateView( TRUE, FALSE );
return;
}
if(bVExpand)
{
WORD i = GetCurveNumber( point );
m_pChannelIndex[i].YFactor -= 0.125;
if(m_pChannelIndex[i].YFactor < 0)
m_pChannelIndex[i].YFactor = 0;
InvalidateRect( NULL );
return;
}
if(bXExpand)
{
bLButtonDown = TRUE;
nxExpandPre = nXExpandIni = point.x;
CPen *OldPen = (CPen *)dc.SelectObject(&AxialPen[4]);
int DrawMode = dc.SetROP2(R2_XORPEN);
dc.MoveTo(nXExpandIni, 0);
dc.LineTo(nXExpandIni, rect.bottom);
dc.SetROP2( DrawMode );
dc.SelectObject( OldPen );
SetCapture();
return;
}
if(bShortSeg)
{
bLButtonDown = TRUE;
nxExpandPre = nXExpandIni = point.x;
CPen *OldPen = (CPen *)dc.SelectObject(&AxialPen[4]);
int DrawMode = dc.SetROP2(R2_XORPEN);
dc.MoveTo(nXExpandIni, 0);
dc.LineTo(nXExpandIni, rect.bottom);
dc.SetROP2( DrawMode );
dc.SelectObject( OldPen );
SetCapture();
return;
}
if(bEditYcursor)
{
int& nWhichCurve = pDoc->nWhichCurve;
WORD m_ChannelNum = pDoc->m_ChannelNum;
int m_ViewChannel = pDoc->m_ViewChannel;
SampRates* m_pSampRates = pDoc->m_pSampRates;
Channel* m_pChannel=pDoc->m_pChannel;
if(nWhichCurve<0)
{
nWhichCurve=GetCurveNumber( point );
if(m_pChannel[nWhichCurve].VAD==-1) //Selcted Curve is Digit curve
{
nWhichCurve = -1;
return;
}
if(nWhichCurve>=0)
{
InvalidateRect( NULL );
pDoc->UpdateAllViews( FALSE, TRUE );
}
return;
}
else
{
double value;
if(!GetCurveValue(point.y, value)) return;
double max,min;
if(m_pChannel[nWhichCurve].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[nWhichCurve].YFactor*CurveHeigh/factor;
double& LCursorA=pDoc->LCursorA;
double fy = factor*(LCursorA-mean);
int CurveIndex = GetCurveNumberIndex( nWhichCurve );
int y0 = HalfCurveHeigh*(CurveIndex-m_ViewChannel)*2+HalfCurveHeigh;
CPen *OldPen = (CPen *)dc.SelectObject( &LPen );
int DrawMode = dc.SetROP2(R2_XORPEN);
dc.MoveTo(0,intINT(y0-fy));
dc.LineTo(rect.right,intINT(y0-fy));
fy = factor*(value-mean);
dc.MoveTo(0,intINT(y0-fy));
dc.LineTo(rect.right,intINT(y0-fy));
dc.SelectObject( OldPen );
dc.SetROP2( DrawMode );
LCursorA = value;
pDoc->UpdateView( FALSE, TRUE );
return;
}
}
if(bCopyArea)
{
bLButtonDown = TRUE;
ptPre = ptIni = point;
SetCapture();
return;
}
SetClassLong(m_hWnd, GCL_HCURSOR, (LONG)HOldCursor);
unsigned long& LCursor=pDoc->LCursor;
CPen *OldPen = (CPen *)dc.SelectObject( &LPen );
int DrawMode = dc.SetROP2(R2_XORPEN);
int xpos;
pDoc->GetHNumPosit(xpos,LCursor);
dc.MoveTo(xpos,0);
dc.LineTo(xpos,rect.bottom);
pDoc->GetHNumIndex(point.x,LCursor);
pDoc->AdjustSampIndex(LCursor,FALSE);
pDoc->GetHNumPosit(xpos,LCursor);
dc.MoveTo(xpos,0);
dc.LineTo(xpos,rect.bottom);
dc.SelectObject( OldPen );
dc.SetROP2( DrawMode );
pDoc->UpdateAllViews( this );
}
void CWgl_32View::OnRButtonDown(UINT nFlags, CPoint point)
{
CWgl_32Doc *pDoc = GetDocument();
if(pDoc->bReadError) return;
CRect rect;
GetClientRect( &rect );
ChannelNumber *m_pChannelIndex = pDoc->m_pChannelIndex;
if(bVExpand)
{
WORD i = GetCurveNumber( point );
m_pChannelIndex[i].YFactor += 0.125;
InvalidateRect( NULL );
return;
}
CClientDC dc(this);
CPen *OldPen = dc.SelectObject( &RPen );
int& nWhichCurve = pDoc->nWhichCurve;
Channel* m_pChannel=pDoc->m_pChannel;
WORD HalfCurveHeigh=pDoc->HalfCurveHeigh;
WORD CurveHeigh=HalfCurveHeigh*2;
WORD m_ChannelNum = pDoc->m_ChannelNum;
long m_ViewChannel = pDoc->m_ViewChannel;
if(bEditYcursor && nWhichCurve>=0)
{
double value;
if(!GetCurveValue(point.y, value)) return;
double max,min;
if(m_pChannel[nWhichCurve].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[nWhichCurve].YFactor*CurveHeigh/factor;
double& RCursorA=pDoc->RCursorA;
double fy = factor*(RCursorA-mean);
int CurveIndex = GetCurveNumberIndex( nWhichCurve );
int y0 = HalfCurveHeigh*(CurveIndex-m_ViewChannel)*2+HalfCurveHeigh;
CPen *OldPen = (CPen *)dc.SelectObject( &RPen );
int DrawMode = dc.SetROP2(R2_XORPEN);
dc.MoveTo(0,intINT(y0-fy));
dc.LineTo(rect.right,intINT(y0-fy));
fy = factor*(value-mean);
dc.MoveTo(0,intINT(y0-fy));
dc.LineTo(rect.right,intINT(y0-fy));
dc.SelectObject( OldPen );
dc.SetROP2( DrawMode );
RCursorA = value;
pDoc->UpdateAllViews( this );
return;
}
unsigned long& RCursor=pDoc->RCursor;
int DrawMode = dc.SetROP2(R2_XORPEN);
int xpos;
pDoc->GetHNumPosit(xpos,RCursor);
dc.MoveTo(xpos,0);
dc.LineTo(xpos,rect.bottom);
pDoc->GetHNumIndex(point.x,RCursor);
pDoc->AdjustSampIndex(RCursor,FALSE);
pDoc->GetHNumPosit(xpos,RCursor);
dc.MoveTo(xpos,0);
dc.LineTo(xpos,rect.bottom);
dc.SelectObject( OldPen );
dc.SetROP2( DrawMode );
pDoc->UpdateAllViews( this );
}
/////////////////////////////////////////////////////////////////////////////
// CWgl_32View Print support implementation
BOOL CWgl_32View::SetPrintIndex(CStringArray* pStrArray)
{
CWgl_32Doc *pDoc = GetDocument();
Channel* m_pChannel = pDoc->m_pChannel;
WORD m_ChannelNum = pDoc->m_ChannelNum;
if(PrintIndex)
delete[] PrintIndex;
nPDigNUM = 0;
nPAnaNUM = 0;
PrintChannelNum = pStrArray->GetSize();
PrintIndex = new short int[PrintChannelNum];
short int* APrintIndex = new short int[PrintChannelNum];
short int i,j,si,sj;
for(i=0; i<PrintChannelNum; i++)
{
sscanf(pStrArray->GetAt(i),"%d",&si);
si --;
APrintIndex[i] = si;
if(m_pChannel[si].VAD < 0)
nPDigNUM ++;
else
nPAnaNUM ++;
}
si = 0;
sj = nPAnaNUM;
for(i=0; i<PrintChannelNum; i++)
{
j = APrintIndex[i];
if(m_pChannel[j].VAD >= 0)
PrintIndex[si++] = j;
else
PrintIndex[sj++] = j;
}
delete[] APrintIndex;
return TRUE;
}
BOOL CWgl_32View::SetPrintIndex(int nCPU)
{
int i;
switch(nCPU)
{
case 1:
for(i=0;i<12;i++)
PrintIndex[i] = i;
for(i=0;i<18;i++)
PrintIndex[i+12] = i+48;
break;
case 2:
for(i=0;i<12;i++)
PrintIndex[i] = i+12;
for(i=0;i<18;i++)
PrintIndex[i+12] = i+66;
break;
case 3:
for(i=0;i<12;i++)
PrintIndex[i] = i+24;
for(i=0;i<18;i++)
PrintIndex[i+12] = i+84;
break;
case 4:
for(i=0;i<12;i++)
PrintIndex[i] = i+36;
for(i=0;i<18;i++)
PrintIndex[i+12] = i+102;
break;
default:
return FALSE;
}
return TRUE;
}
void CWgl_32View::OnFilePrint()
{
CWgl_32Doc *pDoc = GetDocument();
if(pDoc->bReadError) return;
CPrtGrp prtgrp;
if(prtgrp.DoModal()==IDCANCEL) return;
nPDigNUM = 18;
nPAnaNUM = 12;
PrintChannelNum = 30;
if(PrintIndex)
delete[] PrintIndex;
PrintIndex = new short int[30];
SetPrintIndex(prtgrp.nGroup);
bCPUTotalPrint = TRUE;
CView::OnFilePrint();
bCPUTotalPrint = FALSE;
}
void CWgl_32View::OnFilePrintPreview()
{
CWgl_32Doc *pDoc = GetDocument();
if(pDoc->bReadError) return;
CPrtGrp prtgrp;
if(prtgrp.DoModal()==IDCANCEL) return;
nPDigNUM = 18;
nPAnaNUM = 12;
PrintChannelNum = 30;
if(PrintIndex)
delete[] PrintIndex;
PrintIndex = new short int[30];
SetPrintIndex(prtgrp.nGroup);
bCPUTotalPrint = TRUE;
CView::OnFilePrintPreview();
bCPUTotalPrint = FALSE;
}
BOOL CWgl_32View::OnPreparePrinting(CPrintInfo* pInfo)
{
pInfo->m_pPD->m_pd.Flags |= PD_PRINTSETUP|PD_RETURNDC|PD_NOPAGENUMS;
return DoPreparePrinting(pInfo);
}
void CWgl_32View::OnBeginPrinting(CDC* pDC, CPrintInfo* pInfo)
{
memset(&logfont,0,sizeof(logfont));
logfont.lfHeight = -23;
logfont.lfWidth = 0;
logfont.lfEscapement = 0;
logfont.lfOrientation = 0;
logfont.lfWeight = 400;
logfont.lfItalic = 0;
logfont.lfUnderline = 0;
logfont.lfStrikeOut = 0;
logfont.lfCharSet = ANSI_CHARSET;
logfont.lfOutPrecision = OUT_DEFAULT_PRECIS;
logfont.lfClipPrecision = CLIP_DEFAULT_PRECIS;
logfont.lfQuality = DEFAULT_QUALITY;
logfont.lfPitchAndFamily = DEFAULT_PITCH;
lstrcpy(logfont.lfFaceName,_T("Times New Roman"));
m_hPrtFont.CreateFontIndirect(&logfont);
}
void CWgl_32View::OnEndPrinting(CDC* pDC, CPrintInfo* pInfo)
{
m_hPrtFont.Detach();
CView::OnEndPrinting(pDC, pInfo);
}
void CWgl_32View::OnPrepareDC(CDC* pDC, CPrintInfo* pInfo)
{
if(pDC->IsPrinting())
{
pDC->SetMapMode(MM_LOMETRIC);
if(pInfo->m_nCurPage == 1)
{
pInfo->m_bContinuePrinting = TRUE;
return;
}
if(pInfo->m_nCurPage <= pInfo->GetMaxPage())
pInfo->m_bContinuePrinting = TRUE;
else
pInfo->m_bContinuePrinting = FALSE;
}
else
pDC->SetMapMode(MM_TEXT);
}
void CWgl_32View::GetSampRateChar(double SampRate, char *strTemp)
{
if(SampRate==1000.0)
lstrcpy(strTemp,_T("AB"));
else
if(SampRate==200.0)
lstrcpy(strTemp, _T("C"));
else
if(SampRate==10.0)
lstrcpy(strTemp, _T("D"));
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -