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

📄 wgl_32view.cpp

📁 一个真正实用的应用程序
💻 CPP
📖 第 1 页 / 共 5 页
字号:
			else
				if(SampRate==1.0)
					lstrcpy(strTemp, _T("E"));
				else
					lstrcpy(strTemp, _T("ABC"));
}

unsigned long CWgl_32View::GetStartNumber(SampRates* pSampRates,int NumRates,unsigned long sampnum)
{
	for(int i=0; i<NumRates; i++)
		if(pSampRates[i].EndSampNum > sampnum)
			if(i == 0)
				return 0;
			else
				return pSampRates[i-1].EndSampNum;
	return 0;
}

long CWgl_32View::GetPrintPos(unsigned long From,unsigned long End)
{
	CWgl_32Doc *pDoc=GetDocument();
	int ShortWidth=pDoc->ShortWidth;
	int ShortNodeNum=pDoc->ShortNodeNum;
	ShortNode *pShortNode=pDoc->m_pShortNode;
	int xlstartA = 0;
	while(xlstartA<ShortNodeNum && pShortNode[xlstartA].lend<=End)
		xlstartA ++;
	xlstartA--;
	if(pShortNode[xlstartA].bShow==0 && pShortNode[xlstartA].lend<End)
		return -1;
	int xlstart = 0;
	while(xlstart<ShortNodeNum && pShortNode[xlstart].lend<=From)
		xlstart ++;
	long range = 0;
	if(pShortNode[xlstart-1].bShow)
		range = pShortNode[xlstart].lend-From;
	for(int i=xlstart; i<xlstartA; i++)
	{
		if(pShortNode[i].bShow==0)
		{
			range = range+ShortWidth;
			continue;
		}
		range = range+pShortNode[i+1].lend-pShortNode[i].lend;
	}
	range = range+End-pShortNode[i].lend;
	return range;
}

void CWgl_32View::OnPrint(CDC* pDC, CPrintInfo* pInfo) 
{
	CWgl_32Doc *pDoc = GetDocument();
	Channel* m_pChannel = pDoc->m_pChannel;
	WORD m_ChannelNum = pDoc->m_ChannelNum;
	float m_FreqPhase = pDoc->m_FreqPhase;
	WORD m_NumRates = pDoc->m_NumRates;
	SampRates* m_pSampRates = pDoc->m_pSampRates;
	double *SampleIndex = pDoc->SampleIndex;
	double *RelateTime = pDoc->RelateTime;
	long** PSamplData = pDoc->PSamplData;
	CRect rect = pInfo->m_rectDraw;
	int startx = 0;
	int starty = 0;
	int nWidthPerDig;
	int nWidthPerAna;
	const int factory = 3;
	double max,min,factorx;
	int Factx,Facty,index;
	unsigned long end = -rect.bottom/factory;
	unsigned long EndSampNum = pDoc->EndSampNum;
	CFont *GOldFont=(CFont* )pDC->SelectObject(CFont::FromHandle(m_hPrtFont));
	nWidthPerDig = 25*(rect.right-210)/100;
	if(nPDigNUM != 0)
		nWidthPerDig /= (nPDigNUM+2);
	nWidthPerAna = 75*(rect.right-210)/100;
	if(nPAnaNUM != 0)
		if(nPAnaNUM < 12)
			nWidthPerAna /= 12;
		else
			nWidthPerAna /= nPAnaNUM;
	int PreStartX = 100;
	int DigStartx;
	if(nPAnaNUM < 12)
		DigStartx = PreStartX+nWidthPerAna*12+nWidthPerDig/2;
	else
		DigStartx = PreStartX+nWidthPerAna*nPAnaNUM+nWidthPerDig/2;
	CString strTemp;
	char chTemp[6];
	TEXTMETRIC tm;
	int nTextHeigh;
	if(bCPUTotalPrint || bSelectTotalPrint) // Total Curve Print
	{
		if(pInfo->m_nCurPage == 1)
		{
			SampNumIndex = 0;
			CFont m_hPrtFont1,m_hPrtFont2;
			logfont.lfHeight = -32;
			m_hPrtFont1.CreateFontIndirect(&logfont);
			logfont.lfHeight = -18;
			m_hPrtFont2.CreateFontIndirect(&logfont);
			CFont *OldFont = (CFont* )pDC->SelectObject(&m_hPrtFont1);
			pDC->GetTextMetrics( & tm );
			nTextHeigh = tm.tmHeight+tm.tmExternalLeading+1;
			starty = -nTextHeigh;
			int dist = (rect.right-startx*2)/3;
			pDC->SetTextAlign(TA_LEFT|TA_BOTTOM);
			if(	bSelectTotalPrint )
			{
				for(index=0; index<PrintChannelNum; index++)
				{
					Facty = starty - (index/3)*nTextHeigh;
					Factx = PrintIndex[index];
					strTemp.Format("% 3d: %s",m_pChannel[Factx].ChannelNum,m_pChannel[Factx].ChannelName);
					Factx = (index%3)*dist;
					pDC->TextOut(Factx,Facty,strTemp);
				}
				starty = starty-(PrintChannelNum/3)*nTextHeigh-nTextHeigh*2;
				pDC->SelectObject(&m_hPrtFont2);
				pDC->SetTextAlign(TA_CENTER|TA_BOTTOM);
				for(index=0; index<nPAnaNUM; index++)
				{
					Factx = PrintIndex[index];
					strTemp.Format("%1d",m_pChannel[Factx].ChannelNum);
					Factx = PreStartX+nWidthPerAna/2+nWidthPerAna*index;
					pDC->TextOut(Factx,starty,strTemp);
				}
				for(; index<PrintChannelNum; index++)
				{
					Factx = PrintIndex[index];
					strTemp.Format("%1d",m_pChannel[Factx].ChannelNum);
					Factx = DigStartx+nWidthPerDig*(index-nPAnaNUM);
					pDC->TextOut(Factx,starty,strTemp);
				}
			}
			else
			{
				for(index=0; index<nPAnaNUM; index++)
				{
					Facty = starty - (index/3)*nTextHeigh;
					Factx = PrintIndex[index];
					strTemp.Format("% 3d: %s",index+1,m_pChannel[Factx].ChannelName);
					Factx = (index%3)*dist;
					pDC->TextOut(Factx,Facty,strTemp);
				}
				for(;index<PrintChannelNum; index++)
				{
					Facty = starty - (index/3)*nTextHeigh;
					Factx = PrintIndex[index];
					strTemp.Format("% 3d: %s",index-11,m_pChannel[Factx].ChannelName);
					Factx = (index%3)*dist;
					pDC->TextOut(Factx,Facty,strTemp);
				}
				starty = starty-(PrintChannelNum/3)*nTextHeigh-nTextHeigh*2;
				pDC->SelectObject(&m_hPrtFont2);
				pDC->SetTextAlign(TA_CENTER|TA_BOTTOM);
				for(index=0; index<nPAnaNUM; index++)
				{
					Factx = PrintIndex[index];
					strTemp.Format("%1d",index+1);
					Factx = PreStartX+nWidthPerAna/2+nWidthPerAna*index;
					pDC->TextOut(Factx,starty,strTemp);
				}
				Factx = PreStartX+nWidthPerAna*12+nWidthPerDig*9;
				strTemp = _T("1-18");
				pDC->TextOut(Factx,starty,strTemp);
			}
			int leny = starty - rect.bottom;
			pDC->MoveTo(startx,starty);
			pDC->LineTo(rect.right-startx,starty);
			pDC->SelectObject(OldFont);
			pDC->GetTextMetrics( & tm );
			nTextHeigh = tm.tmHeight+tm.tmExternalLeading;
			end = leny/factory;
			pDC->SetTextAlign(TA_LEFT|TA_BOTTOM);
			strTemp.Format("%-8.0lf",RelateTime[0]/1000);
			strTemp.TrimRight();
			strTemp += _T("毫秒");
			pDC->TextOut(0,starty,strTemp);
			pDC->SetTextAlign(TA_LEFT|TA_TOP);
			GetSampRateChar(m_pSampRates[0].SampRate,chTemp);
			pDC->TextOut(0,starty,chTemp);
			nstartini = -starty;
			if(nPAnaNUM > 0)
			{
				Factx = PreStartX+nWidthPerAna/2;
				Facty = starty+nTextHeigh*3/2;
				pDC->MoveTo(PreStartX,Facty+25);
				pDC->LineTo(PreStartX,Facty);
				pDC->LineTo(Factx,Facty);
				pDC->LineTo(Factx,Facty+25);
				max = pDoc->maxA;
				min = pDoc->minA;
				factorx = max-min;
				factorx *= 0.5;
				factorx = factorx*m_pChannel[pDoc->nWhichA].a;
				strTemp.Format("电流%-12.5f",factorx);//,m_pChannel[pDoc->nWhichA].Unit);
				strTemp.TrimRight();
				max = pDoc->maxV;
				min = pDoc->minV;
				factorx = max-min;
				factorx *= 0.5;
				factorx = factorx*m_pChannel[pDoc->nWhichV].a;
				CString str;
				str.Format("电压%-12.5f",factorx);//,m_pChannel[pDoc->nWhichV].Unit);
				str.TrimRight();
				strTemp = str+strTemp;
				pDC->SetTextAlign(TA_LEFT|TA_BOTTOM);
				pDC->TextOut(Factx+5,Facty,strTemp);
				pDC->SetTextAlign(TA_LEFT|TA_TOP);
			}
			UINT nPage = (nstartini+EndSampNum*factory)/(-rect.bottom);
			if(nPage*(-rect.bottom) < nstartini+EndSampNum*factory) nPage++;
			pInfo->SetMaxPage( nPage );
		}
		else 
			SampNumIndex = (-nstartini-rect.bottom-(pInfo->m_nCurPage-2)*rect.bottom)/factory;
		pDC->GetTextMetrics( & tm );
		nTextHeigh = tm.tmHeight+tm.tmExternalLeading;
		end = min(EndSampNum, SampNumIndex+end);
		unsigned long lli;
		for(index=0; index<PrintChannelNum; index++)
		{
			int ActChannel = PrintIndex[index];
			if(m_pChannel[ActChannel].VAD >= 0) // Is Ana Channel
			{
				startx = PreStartX+nWidthPerAna/2+nWidthPerAna*index;
				if(m_pChannel[ActChannel].VAD == 0)
				{
					max = pDoc->maxA;
					min = pDoc->minA;
				}
				else
				{
					max = pDoc->maxV;
					min = pDoc->minV;
				}
				double mean = 0.0;//0.5*(max+min);
				factorx = max-min;
				factorx = nWidthPerAna/factorx;
				double xi = PSamplData[ActChannel][SampNumIndex];
				if( xi == 999999 ) continue;
				xi = factorx*(xi-mean);
				double fy = starty;
				if(IsSpecRate(SampNumIndex,m_NumRates,m_pSampRates))
				{
					pDC->MoveTo(intINT(startx-xi),intINT(fy));
					pDC->LineTo(intINT(startx+xi),intINT(fy));
				}
				else
					pDC->MoveTo(intINT(startx+xi),intINT(fy));
				for(lli=SampNumIndex+1; lli < end; lli++)
				{
						xi = PSamplData[ActChannel][lli];
						if( xi == 999999 ) break;
						xi = factorx*(xi-mean);
						fy = starty-(lli-SampNumIndex)*factory;
						if(IsSpecRate(lli,m_NumRates,m_pSampRates))
						{
							pDC->MoveTo(intINT(startx-xi),intINT(fy));
							pDC->LineTo(intINT(startx+xi),intINT(fy));
						}
						else
							pDC->LineTo(intINT(startx+xi),intINT(fy));
				}
			}
			else // Is Dig Channel
			{
				startx = index-nPAnaNUM;
				startx = startx+startx/6;
				startx = DigStartx+nWidthPerDig*startx;
				CPen Pen(PS_SOLID, 5, RGB(0,0,0));
				CPen *OldPen = (CPen *)pDC->SelectObject(&Pen);
				double fy = starty;
				pDC->MoveTo(intINT(startx),intINT(fy));
				for(lli=SampNumIndex+1; lli < end; lli++)
				{
					if(PSamplData[ActChannel][lli] == 1)
					{
						pDC->SelectObject(&Pen);
						fy = starty-(lli-SampNumIndex)*factory;
						pDC->LineTo(intINT(startx),intINT(fy));
					}
					else
						if(PSamplData[ActChannel][lli] == 0)
						{
							pDC->SelectObject(OldPen);
							fy = starty-(lli-SampNumIndex)*factory;
							pDC->LineTo(intINT(startx),intINT(fy));
						}
				}
				pDC->SelectObject(OldPen);
			}
		}
		Facty = starty-(end-SampNumIndex)*factory;
		for(index=0; index<nPAnaNUM; index++)
		{
			Factx = PreStartX+nWidthPerAna/2+nWidthPerAna*index;
			pDC->MoveTo(Factx,starty);
			pDC->LineTo(Factx, Facty);
		}
		for(int y = 0; y < m_NumRates-1; y++)
			if(m_pSampRates[y].EndSampNum > SampNumIndex)
				break;
		for(int t = y; t < m_NumRates-1; t++)
			if(m_pSampRates[t].EndSampNum >= end)
				break;
		for(index=y; index<t; index++)
		{
			GetSampRateChar(m_pSampRates[index+1].SampRate,chTemp);
			Facty = starty-(m_pSampRates[index].EndSampNum-SampNumIndex)*factory;
			pDC->MoveTo(0,Facty);
			pDC->LineTo(rect.right,Facty);
			pDC->TextOut(0,Facty,chTemp);
			pDC->SetTextAlign(TA_BOTTOM);
			min = RelateTime[m_pSampRates[index].EndSampNum-1];
			max = RelateTime[m_pSampRates[index].EndSampNum];
			strTemp.Format("%-8.0lf",min/1000);
			strTemp.TrimRight();
			pDC->TextOut(0,Facty+nTextHeigh,strTemp);
			strTemp.Format("%-8.0lf",max/1000);
			strTemp.TrimRight();
			pDC->TextOut(0,Facty,strTemp);
			pDC->SetTextAlign(TA_TOP);
		}
		pDC->SetTextAlign(TA_BOTTOM);
		for(lli=SampNumIndex; lli < end; lli++)
		{
			unsigned long lbase=GetStartNumber(m_pSampRates,m_NumRates,lli);
			lbase = lli - lbase;
			long tl = lbase%20;
			if(tl != 0) continue;
			if(lbase == 0) continue;
			tl = lbase/20;
			Facty = starty-(lli-SampNumIndex)*factory;
			tl = lbase%100;
			if(tl == 0)
				pDC->MoveTo(0,Facty);
			else
				pDC->MoveTo(PreStartX*3/4,Facty);
			pDC->LineTo(rect.right,Facty);
			if(tl != 0) continue;
			factorx = RelateTime[lli];
			strTemp.Format("%-8.0lf",factorx/1000);
			strTemp.TrimRight();
			pDC->TextOut(0,Facty,strTemp);
		}
		if(end == EndSampNum)
		{
			strTemp.Format("%-8.0lf",RelateTime[EndSampNum-1]/1000);
			strTemp.TrimRight();
			Facty = starty-(EndSampNum-SampNumIndex)*factory;
			pDC->TextOut(0,Facty,strTemp);
		}
		pDC->SelectObject(GOldFont);
		return;
	}
// Short Curve Print if(bSelectShortPrint)
	if(pInfo->m_nCurPage == 1)
	{
		CFont m_hPrtFont1,m_hPrtFont2;
		logfont.lfHeight = -32;
		m_hPrtFont1.CreateFontIndirect(&logfont);
		logfont.lfHeight = -18;
		m_hPrtFont2.CreateFontIndirect(&logfont);
		CFont *OldFont = (CFont* )pDC->SelectObject(&m_hPrtFont1);
		pDC->GetTextMetrics( & tm );
		nTextHeigh = tm.tmHeight+tm.tmExternalLeading+1;
		starty = -nTextHeigh;
		int dist = (rect.right-startx*2)/3;
		pDC->SetTextAlign(TA_LEFT|TA_BOTTOM);
		if(	bSelectShortPrint )
		{
			for(index=0; index<PrintChannelNum; index++)
			{
				Facty = starty - (index/3)*nTextHeigh;
				Factx = PrintIndex[index];
				strTemp.Format("% 3d: %s",m_pChannel[Factx].ChannelNum,m_pChannel[Factx].ChannelName);
				Factx = (index%3)*dist;
				pDC->TextOut(Factx,Facty,strTemp);
			}
			starty = starty-(PrintChannelNum/3)*nTextHeigh-nTextHeigh*2;
			pDC->SelectObject(&m_hPrtFont2);
			pDC->SetTextAlign(TA_CENTER|TA_BOTTOM);
			for(index=0; index<nPAnaNUM; index++)
			{
				Factx = PrintIndex[index];
				strTemp.Format("%1d",m_pChannel[Factx].ChannelNum);
				Factx = PreStartX+nWidthPerAna/2+nWidthPerAna*index;
				pDC->TextOut(Factx,starty,strTemp);
			}
			for(; index<PrintChannelNum; index++)
			{
				Factx = PrintIndex[index];
				strTemp.Format("%1d",m_pChannel[Factx].ChannelNum);
				Factx = DigStartx+nWidthPerDig*(index-nPAnaNUM);
				pDC->TextOut(Factx,starty,strTemp);
			}
		}
		else
		{
			for(index=0; index<nPAnaNUM; index++)
			{
				Facty = starty - (index/3)*nTextHeigh;
				Factx = PrintIndex[index];
				strTemp.Format("% 3d: %s",index+1,m_pChannel[Factx].ChannelName);
				Factx = (index%3)*dist;
				pDC->TextOut(Factx,Facty,strTemp);
			}
			for(;index<PrintChannelNum; index++)
			{
				Facty = starty - (index/3)*nTextHeigh;
				Factx = PrintIndex[index];
				strTemp.Format("% 3d: %s",index-11,m_pChannel[Factx].ChannelName);
				Factx = (index%3)*dist;
				pDC->TextOut(Factx,Facty,strTemp);
			}
			starty = starty-(PrintChannelNum/3)*nTextHeigh-nTextHeigh*2;
			pDC->SelectObject(&m_hPrtFont2);
			pDC->SetTextAlign(TA_CENTER|TA_BOTTOM);
			for(index=0; index<nPAnaNUM; index++)
			{
				Factx = PrintIndex[index];
				strTemp.Format("%1d",index+1);
				Factx = PreStartX+nWidthPerAna/2+nWidthPerAna*index;
				pDC->TextOut(Factx,starty,strTemp);
			}
			Factx = PreStartX+nWidthPerAna*12+nWidthPerDig*9;
			strTemp = _T("1-18");
			pDC->TextOut(Factx,starty,strTemp);
		}
		int leny = starty - rect.bottom;
		pDC->MoveTo(startx,starty);
		pDC->LineTo(rect.right-startx,starty);
		pDC->SelectObject(OldFont);
		pDC->GetTextMetrics( & tm );
		nTextHeigh = tm.tmHeight+tm.tmExternalLeading;
		end = leny/factory;
		pDC->SetTextAlign(TA_LEFT|TA_BOTTOM);
		strTemp.Format("%-8.0lf",RelateTime[0]/1000);
		strTemp.TrimRight();
		strTemp += _T("毫秒");
		pDC->TextOut(0,starty,strTemp);
		pDC->SetTextAlign(TA_LEFT|TA_TOP);
		GetSampRateChar(m_pSampRates[0].SampRate,chTemp);
		pDC->TextOut(0,starty,chTemp);
		nstartini = -starty;
		if(nPAnaNUM > 0)
		{
			Factx = PreStartX+nWidthPerAna/2;
			Facty = starty+nTextHeigh*3/2;
			pDC->MoveTo(PreStartX,Facty+25);
			pDC->LineTo(PreStartX,Facty);
			pDC->LineTo(Factx,Facty);
			pDC->LineTo(Factx,Facty+25);
			max = pDoc->maxA;
			min = pDoc->minA;
			factorx = max-min;
			factorx *= 0.5;
			factorx = factorx*m_pChannel[pDoc->nWhichA].a;
			strTemp.Format("电流%-12.5f",factorx);//,m_pChannel[pDoc->nWhichA].Unit);
			strTemp.TrimRight();
			max = pDoc->maxV;
			min = pDoc->minV;
			factorx = max-min;
			factorx *= 0.5;
			factorx = factorx*m_pChannel[pDoc->nWhichV].a;
			CString str;
			str.Format("电压%-12.5f",factorx);//,m_pChannel[pDoc->nWhichV].Unit);
			str.TrimRight();
			strTemp = str+strTemp;
			pDC->SetTex

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -