⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 wgl_32view.cpp

📁 一个真正实用的应用程序
💻 CPP
📖 第 1 页 / 共 5 页
字号:
		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 + -