Exemple #1
0
void CMyImage::OnPaint() 
{
	if((iImage<0)||(m_ImageList==NULL))
		return;
	CPaintDC dc(this); 
	CRect rect;
	GetClientRect(rect);
	if(!bClicked)
	{
		CPoint p(rect.left + 1,rect.top+1);
		m_ImageList->Draw(&dc, iImage, p, ILD_NORMAL);
	}
	else
	{
		CPoint p(rect.left + 2,rect.top+2);
		m_ImageList->Draw(&dc, iImage, p, ILD_NORMAL);
	}


	CPen BlackPen(PS_SOLID,1,RGB(0,0,0));
	dc.SelectObject(BlackPen);
	dc.MoveTo(rect.left,rect.top);
	dc.LineTo(rect.right,rect.top);
	dc.MoveTo(rect.left,rect.top);
	dc.LineTo(rect.left,rect.bottom);
	if(bClicked)
	{
		dc.MoveTo(rect.left,rect.top+1);
		dc.LineTo(rect.right,rect.top+1);
		dc.MoveTo(rect.left+1,rect.top);
		dc.LineTo(rect.left+1,rect.bottom);

		CPen WhitePen(PS_SOLID,1,RGB(255,255,255));
		dc.SelectObject(WhitePen);
		dc.MoveTo(rect.left,rect.bottom-1);
		dc.LineTo(rect.right-1,rect.bottom-1);
		dc.LineTo(rect.right-1,rect.top);
	}
	else
	{
		dc.MoveTo(rect.left,rect.bottom-1);
		dc.LineTo(rect.right-1,rect.bottom-1);
		dc.LineTo(rect.right-1,rect.top);
	}

}
void CDBPickView::DrawFocused(CDC *pDC)
	{
	if(nActiveScreen==-1) return;

	int xw1=WaveformInfo[nActiveScreen]->xw1+4;
	int xw2=WaveformInfo[nActiveScreen]->xw1+WindowInfoXsize-4;
	int yw1=WaveformInfo[nActiveScreen]->yw1+4;
	int yw2=WaveformInfo[nActiveScreen]->yw2-4;


    CPen WhitePen(PS_SOLID,1,RGB(255,255,255));
    CPen GrayPen(PS_SOLID,1,RGB(128,128,128));

    CPen   *oldPen=pDC->GetCurrentPen();

	pDC->SelectObject(&GrayPen);

	pDC->MoveTo(xw1,MaxY-yw2);		
	pDC->LineTo(xw2,MaxY-yw2);

	pDC->MoveTo(xw1,MaxY-yw2);		
	pDC->LineTo(xw1,MaxY-yw1);

	pDC->SelectObject(&WhitePen);

	pDC->MoveTo(xw2,MaxY-yw1);		
	pDC->LineTo(xw2,MaxY-yw2);

	pDC->MoveTo(xw2+1,MaxY-yw1);		
	pDC->LineTo(xw2+1,MaxY-yw2);


	pDC->MoveTo(xw2,MaxY-yw1);		
	pDC->LineTo(xw1,MaxY-yw1);

	pDC->MoveTo(xw2,MaxY-yw1+1);		
	pDC->LineTo(xw1,MaxY-yw1+1);


    pDC->SelectObject(oldPen);

	}
void CDBPickView::DrawWindow(int nWindow, CDC *pDC)
	{

    CBrush WhiteBrush(RGB(255,255,255));
    CBrush GrayBrush(RGB(192,192,192));
    CBrush BlueBrush(RGB(0,0,128));

    CPen WhitePen(PS_SOLID,1,RGB(255,255,255));
	CPen DarkPen(PS_SOLID,1,RGB(0,0,0));
    CPen BluePen(PS_SOLID,1,RGB(0,0,255));
    CPen YellowPen(PS_SOLID,1,RGB(255,255,0));


	int xw1=WaveformInfo[nWindow]->xw1;
	int xw2=WaveformInfo[nWindow]->xw2;
	int yw1=WaveformInfo[nWindow]->yw1;
	int yw2=WaveformInfo[nWindow]->yw2;

	int x1=WaveformInfo[nWindow]->x1;
	int x2=WaveformInfo[nWindow]->x2;
	int y1=WaveformInfo[nWindow]->y1;
	int y2=WaveformInfo[nWindow]->y2;



	long amin=WaveformInfo[nWindow]->amin;
	long amax=WaveformInfo[nWindow]->amax;



    CPen   *oldPen=pDC->GetCurrentPen();
    CFont  *oldFont=pDC->GetCurrentFont();
    CBrush *oldBrush=pDC->GetCurrentBrush();



	CRect rc(xw1, MaxY-yw2, xw2, MaxY-yw1);
	pDC->FillRect(&rc, &BlueBrush);

	pDC->SelectObject(&DarkPen);

//***********************************************************

	pDC->SelectObject(&WhitePen);

	pDC->MoveTo(xw1,MaxY-yw2);		
	pDC->LineTo(xw2,MaxY-yw2);

	pDC->MoveTo(xw1,MaxY-yw2);		
	pDC->LineTo(xw1,MaxY-yw1);

	pDC->MoveTo(xw1+1,MaxY-yw2);		
	pDC->LineTo(xw1+1,MaxY-yw1);


	pDC->SelectObject(&DarkPen);

	pDC->MoveTo(xw2,MaxY-yw1);		
	pDC->LineTo(xw2,MaxY-yw2);

	pDC->MoveTo(xw2,MaxY-yw1);		
	pDC->LineTo(xw1,MaxY-yw1);


	pDC->SelectObject(&DarkPen);

	pDC->MoveTo(xw1+WindowInfoXsize,MaxY-yw1);		
	pDC->LineTo(xw1+WindowInfoXsize,MaxY-yw2);

	pDC->SelectObject(&WhitePen);

	pDC->MoveTo(xw1+WindowInfoXsize+1,MaxY-yw1);		
	pDC->LineTo(xw1+WindowInfoXsize+1,MaxY-yw2);

	pDC->MoveTo(xw1+WindowInfoXsize+2,MaxY-yw1);		
	pDC->LineTo(xw1+WindowInfoXsize+2,MaxY-yw2);

//*************************************************************
//      Draw Ampl (Y) Axis
//

	CRect rc1(xw1, MaxY-yw2, xw1+WindowInfoXsize-1, MaxY-yw1);
	pDC->FillRect(&rc1, &GrayBrush);


	pDC->SelectObject(&DarkPen);
	pDC->SetTextColor(RGB(0,0,0));

	pDC->MoveTo(xw1+WindowInfoXsize-8,MaxY-(yw1+8));		
	pDC->LineTo(xw1+WindowInfoXsize-8,MaxY-(yw2-8));

	pDC->MoveTo(xw1+WindowInfoXsize-8,MaxY-(yw1+8));
	pDC->LineTo(xw1+WindowInfoXsize-8+4,MaxY-(yw1+8));

	pDC->MoveTo(xw1+WindowInfoXsize-8,MaxY-(yw2-8));
	pDC->LineTo(xw1+WindowInfoXsize-8+4,MaxY-(yw2-8));

	pDC->SelectObject(&WhitePen);

	{
	RECT rcText;
	char cText[64];
	sprintf(cText,"%d",amax);

	CRect rcc1(xw1,MaxY-(yw2-8),xw1+WindowInfoXsize-8-2, MaxY-(yw2-8-13));

	pDC->DrawText(cText,rcc1,DT_RIGHT);

	sprintf(cText,"%d",amin);
	GetTextRectangle(cText, rcText);

	CRect rcc2(xw1,MaxY-(yw1+8+13),xw1+WindowInfoXsize-8-2, MaxY-(yw1-8));
	pDC->DrawText(cText,rcc2,DT_RIGHT);

	CRect rcc3(xw1+5,(MaxY-yw2),xw1+WindowInfoXsize-8-2, (MaxY-yw1));
	sprintf(cText,"%s::%s",WaveformInfo[nWindow]->StaName, WaveformInfo[nWindow]->ChanName);
	pDC->DrawText(cText,rcc3,	DT_VCENTER|DT_SINGLELINE );

	}

//**************************************************************

	int nXferBlocks=this->pRTDisplay->WaveformInfo[nWindow]->xferData.GetSize();
	double ttt=-1.;
	double dSpS=WaveformInfo[nWindow]->dSpS;

	pDC->SelectObject(&YellowPen);

	for(int j=0; j<nXferBlocks; ++j)
		{
		CDataBlock *xfd=this->pRTDisplay->WaveformInfo[nWindow]->xferData[j];
		double t1packet=this->pRTDisplay->WaveformInfo[nWindow]->xferData[j]->beg;
		double t2packet=this->pRTDisplay->WaveformInfo[nWindow]->xferData[j]->end;
		int nsamp=this->pRTDisplay->WaveformInfo[nWindow]->xferData[j]->nsamp;


		for(int k=0; k<nsamp; ++k)
			{
			long a=this->pRTDisplay->WaveformInfo[nWindow]->xferData[j]->data[k];
			double tt=t1packet+(1./dSpS)*k;
			int x,y;

			if(tt<t1) continue;
			if(tt>t2) break;

			x=(int)((tt-t1)*(x2-x1)/(t2-t1)+x1);

			if(a>amax) a=amax;
			if(a<amin) a=amin;

			y=(a-amin)*(y2-y1)/(amax-amin)+y1;
			y=MaxY-y;
			if(tt-ttt>1.1/dSpS)
				{
				pDC->MoveTo(x,y);		
				}
			else
				{
				pDC->LineTo(x,y);		
				}
			ttt=tt;
			}
		}
	DrawGaps(nWindow,pDC);
    pDC->SelectObject(oldPen);
    pDC->SelectObject(oldBrush);
    pDC->SelectObject(oldFont);

	}
void CDBPickView::DrawTimePanel(CDC *pDC)
	{

	char cBuff[64];
    CPen WhitePen(PS_SOLID,1,RGB(255,255,255));
	CPen DarkPen(PS_SOLID,1,RGB(0,0,0));
	CPen RedPen(PS_SOLID,1,RGB(255,0,0));
	
	int xw1=WindowInfoXsize+3;
	int xw2=MaxX-1;
	int yw1=1;
	int yw2=TimeBarYsize-1;
	int x, x_old;


	CPen   *oldPen=pDC->GetCurrentPen();
	pDC->SelectObject(&WhitePen);


	pDC->MoveTo(xw1,MaxY-yw2);		
	pDC->LineTo(xw2,MaxY-yw2);

	pDC->MoveTo(xw1,MaxY-yw2);		
	pDC->LineTo(xw1,MaxY-yw1);

	pDC->SelectObject(&DarkPen);

	pDC->MoveTo(xw2,MaxY-yw1);		
	pDC->LineTo(xw2,MaxY-yw2);

	pDC->MoveTo(xw2,MaxY-yw1);		
	pDC->LineTo(xw1,MaxY-yw1);

	x_old=-1;

	int imode;

	x=(int)((xw2-xw1)/(t2-t1));

	if(x<3)
		{
		x=(int)(60*(xw2-xw1)/(t2-t1));
		if(x==0)
			{
			imode=2;
			}
		else
			{
			imode=1;
			}
		}
	else
		{
		imode=0;
		}
	nLastMarkRightPos=-100;
	for(long tt=(long)t1; tt<t2; ++tt)
		{
		x=(int)((tt-t1)*(xw2-xw1)/(t2-t1)+xw1);

		if(tt%3600==0)
			{
			pDC->SelectObject(&WhitePen);
			pDC->MoveTo(x,MaxY-yw2);		
			pDC->LineTo(x,MaxY-(yw2-12));
			pDC->SelectObject(&DarkPen);
			pDC->MoveTo(x+1,MaxY-yw2);		
			pDC->LineTo(x+1,MaxY-(yw2-12));
			x_old=x;


			lstrcpy(cBuff, dttostr(tt, 1));
			RECT rcc;
			GetTextRectangle(cBuff,rcc);
			int nWtd=(rcc.right-rcc.left)/2+1;
			rcc.left=x-nWtd;
			rcc.right=x+nWtd;
			rcc.bottom=(MaxY-yw1);
			rcc.top=(MaxY-yw2);
			if(nLastMarkRightPos<rcc.left)
				{
				pDC->DrawText(cBuff,&rcc,DT_LEFT|DT_SINGLELINE|DT_BOTTOM);
				nLastMarkRightPos=rcc.right;
				}

			continue;
			}


		
		if(imode<2)
		if(tt%60==0)
			{
			pDC->SelectObject(&WhitePen);
			pDC->MoveTo(x,MaxY-yw2);		
			pDC->LineTo(x,MaxY-(yw2-8));
			pDC->SelectObject(&DarkPen);
			pDC->MoveTo(x+1,MaxY-yw2);		
			pDC->LineTo(x+1,MaxY-(yw2-8));
			x_old=x;

			pDC->SetTextColor(RGB(255,255,255));

			lstrcpy(cBuff, dttostr(tt, 1));
			RECT rcc;
			GetTextRectangle(cBuff,rcc);
			int nWtd=(rcc.right-rcc.left)/2+1;
			rcc.left=x-nWtd;
			rcc.right=x+nWtd;
			rcc.bottom=(MaxY-yw1);
			rcc.top=(MaxY-yw2);
			if(nLastMarkRightPos<rcc.left)
				{
				pDC->DrawText(cBuff,&rcc,DT_LEFT|DT_SINGLELINE|DT_BOTTOM);
				nLastMarkRightPos=rcc.right;
				}
			continue;
			}

		if(imode==0)
			{
			pDC->SelectObject(&WhitePen);
			pDC->MoveTo(x,MaxY-yw2);		
			pDC->LineTo(x,MaxY-(yw2-4));
			pDC->SelectObject(&DarkPen);
			pDC->MoveTo(x+1,MaxY-yw2);		
			pDC->LineTo(x+1,MaxY-(yw2-4));
			x_old=x;
			}

		}

/*	pDC->SetTextColor(RGB(255,255,255));

	lstrcpy(cBuff, dttostr(t1, 1));
	CRect *rcc=new CRect(xw1,(MaxY-yw2),xw2, (MaxY-yw1));
	pDC->DrawText(cBuff,rcc,DT_LEFT|DT_SINGLELINE|DT_BOTTOM);
	delete rcc;

	lstrcpy(cBuff, dttostr(t2, 1));
	rcc=new CRect(xw1,(MaxY-yw2),xw2, (MaxY-yw1));
	pDC->DrawText(cBuff,rcc,DT_RIGHT|DT_SINGLELINE|DT_BOTTOM);
	delete rcc;*/

    pDC->SelectObject(oldPen);

	}
void CDBPickView::DrawWaveforms()
	{
	CWaitCursor wc;

	this->pRTDisplay->Critical.Lock();

	RECT rc;
    CDC MemDC;
    CDC *pDC=GetDC();
	CBitmap Bitmap1;

	CalculateWindowsSize();


	rc.left=rc.top=0;
	rc.right=MaxX;
	rc.bottom=MaxY;

    Bitmap1.CreateCompatibleBitmap(pDC,rc.right,rc.bottom);
    MemDC.CreateCompatibleDC(pDC);
	ReleaseDC(pDC);

    CBitmap *poldBMP=MemDC.SelectObject(&Bitmap1);

    CBrush WhiteBrush(RGB(255,255,255));
    CBrush GrayBrush(RGB(192,192,192));
    CBrush BlueBrush(RGB(0,0,128));

    CPen WhitePen(PS_SOLID,1,RGB(255,255,255));
	CPen DarkPen(PS_SOLID,1,RGB(0,0,0));
    CPen BluePen(PS_SOLID,1,RGB(0,0,255));
    CPen YellowPen(PS_SOLID,1,RGB(255,255,0));

    CPen WhitePen2(PS_SOLID,2,RGB(255,255,255));
    CPen GrayPen2(PS_SOLID,2,RGB(128,128,128));


    CPen   *oldPen=MemDC.GetCurrentPen();
    CFont  *oldFont=MemDC.GetCurrentFont();
    CBrush *oldBrush=MemDC.GetCurrentBrush();


	MemDC.SetBkMode(TRANSPARENT);

	MemDC.FillRect(&rc, &BlueBrush);
	MemDC.SelectObject(CFont::FromHandle((HFONT)GetStockObject(ANSI_VAR_FONT)));

	MemDC.SelectObject(&DarkPen);
	MemDC.MoveTo(0,0);		
	MemDC.LineTo(0,MaxY);

	DrawTimePanel(&MemDC);

	for(int i=0; i<WaveformInfo.GetSize(); ++i)
		{
		DrawWindow(i,&MemDC);
		}



    MemDC.SelectObject(poldBMP);
    MemDC.SelectObject(oldPen);
    MemDC.SelectObject(oldBrush);
    MemDC.SelectObject(oldFont);
	MemDC.DeleteDC();
	this->pRTDisplay->Critical.Unlock();

	ScreenBitmapCriticalSection.Lock();
    if(Bitmap.m_hObject!=NULL) 
		{
		Bitmap.DeleteObject();
		}
	HGDIOBJ pBmp=Bitmap1.Detach();
	Bitmap.Attach(pBmp);
	ScreenBitmapCriticalSection.Unlock();

	InvalidateRect(NULL,FALSE);

	}
void CPreview::DrawPreviewBitmap()
	{
	if(!bContinue) return;


	MaxX=width();
	MaxY=height();
	QPixmap tmpBitmap(MaxX, MaxY);
	QPainter DC(&tmpBitmap);
	QRect rc=rect();

	x1=4;
	x2=MaxX-4;
	y1=4;
	y2=MaxY-4;

	xw1=1;
	xw2=MaxX;
	yw1=0;
	yw2=MaxY;


    QBrush WhiteBrush(QColor(255,255,255));
    QBrush GrayBrush(QColor(192,192,192));
    QBrush BlueBrush(QColor(0,0,255));

    QPen WhitePen(QColor(255,255,255));
	QPen DarkPen(QColor(0,0,0));
    QPen BluePen(QColor(0,0,255));
    QPen YellowPen(QColor(255,255,0));
    QPen WhitePen2(QColor(255,255,255),2);
    QPen GrayPen2(QColor(128,128,128),2);


//********************************************************************
	DC.setPen(BluePen);
	DC.fillRect(rc, BlueBrush);
//	DC.SelectObject(CFont::FromHandle((HFONT)GetStockObject(ANSI_VAR_FONT)));


	int xl=(int)((pDisplay->t1 - pDisplay->tB1)*(x2-x1)/(pDisplay->tB2-pDisplay->tB1)+x1+0.5);
	int xr=(int)((pDisplay->t2 - pDisplay->tB1)*(x2-x1)/(pDisplay->tB2-pDisplay->tB1)+x1+0.5);

	DC.setPen(WhitePen2);

	DC.moveTo(xw1,MaxY-yw2);		
	DC.lineTo(xw2,MaxY-yw2);

	DC.moveTo(xw1,MaxY-yw2);		
	DC.lineTo(xw1,MaxY-yw1);

	DC.setPen(GrayPen2);

	DC.moveTo(xw2,MaxY-yw1);		
	DC.lineTo(xw2,MaxY-yw2);

	DC.moveTo(xw2,MaxY-yw1);		
	DC.lineTo(xw1,MaxY-yw1);

	DrawWaveform(DC);
	
	DC.setPen(WhitePen2);
	DC.moveTo(xl,MaxY-y1);		
	DC.lineTo(xr,MaxY-y1);
	DC.lineTo(xr,MaxY-y2);		
	DC.lineTo(xl,MaxY-y2);		
	DC.lineTo(xl,MaxY-y1);		


//********************************************************************

	ScreenBitmapCriticalSection.lock();
	Bitmap=tmpBitmap;
	bDrawBitmap=TRUE;
	ScreenBitmapCriticalSection.unlock();
	repaint(FALSE);
	}