📄 wgl_32view.cpp
字号:
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 + -