www.pudn.com > bitmappaint.rar > radarView.cpp


// radarView.cpp : implementation of the CRadarView class 
// 
 
#include "stdafx.h" 
#include "radar.h" 
 
#include "radarDoc.h" 
#include "radarView.h" 
#include "wzdbtmap.h" 
#ifdef _DEBUG 
#define new DEBUG_NEW 
#undef THIS_FILE 
static char THIS_FILE[] = __FILE__; 
#endif 
 
///////////////////////////////////////////////////////////////////////////// 
// CRadarView 
 
IMPLEMENT_DYNCREATE(CRadarView, CScrollView) 
 
BEGIN_MESSAGE_MAP(CRadarView, CScrollView) 
	//{{AFX_MSG_MAP(CRadarView) 
	ON_WM_RBUTTONDOWN() 
	ON_COMMAND(ID_FILE_PRINT, OnFilePrint) 
	ON_COMMAND(ID_FILE_PRINT_PREVIEW, OnFilePrintPreview) 
	ON_COMMAND(ID_HLONG, OnHLong) 
	ON_COMMAND(ID_HSHORT, OnHShort) 
	ON_COMMAND(ID_VLONG, OnVLong) 
	ON_UPDATE_COMMAND_UI(ID_HLONG, OnUpdateHlong) 
	ON_COMMAND(ID_VSHORT, OnVShort) 
	ON_UPDATE_COMMAND_UI(ID_HSHORT, OnUpdateHshort) 
	ON_UPDATE_COMMAND_UI(ID_VLONG, OnUpdateVlong) 
	ON_UPDATE_COMMAND_UI(ID_VSHORT, OnUpdateVshort) 
	ON_COMMAND(ID_IMAGE_SAVE, OnImageSave) 
	//}}AFX_MSG_MAP 
	// Standard printing commands 
	//ON_COMMAND(ID_FILE_PRINT, CScrollView::OnFilePrint) 
	ON_COMMAND(ID_FILE_PRINT_DIRECT, CScrollView::OnFilePrint) 
	//ON_COMMAND(ID_FILE_PRINT_PREVIEW, CScrollView::OnFilePrintPreview) 
	ON_MESSAGE(WM_USERAPPLY,OnUserApply) 
END_MESSAGE_MAP() 
 
///////////////////////////////////////////////////////////////////////////// 
// CRadarView construction/destruction 
 
CRadarView::CRadarView():m_para("") 
{ 
	// TODO: add construction code here 
	bb.m_BitRect.SetRect(0,0,1600,1400); 
	m_BkColor=RGB(255,255,255); 
	m_WaveColor=RGB(0,0,0); 
	 
	m_bBitmapIsNone=true; 
	m_bShowWaveLine=true; 
	 
	m_bFillRight=true; 
	m_bFillLeft=false; 
    m_nLeftx=300; 
	m_nLefty=300; 
	m_nRightx=300; 
	m_nRighty=100; 
	 
	m_nTraceToTrace=20; 
    m_nTraceWidth=40; 
	 
	m_nTraceFrom=1; 
	m_nTraceTo=50; 
	m_nTimeFrom=0; 
	m_nTimeTo=400; 
	m_nMaxMin=30000; 
    m_nGrayFrom=30; 
	m_nGrayTo=250; 
	 
	m_nVAxisLength=1000; 
    m_nHAxisLength=m_nTraceToTrace*49; 
    
	m_para.m_page1.m_GainSelect=1; 
	m_para.m_page1.m_nSECAbsorb=3; 
    m_para.m_page1.m_nAGCMaxGain=200; 
	m_para.m_page1.m_nSECMaxGain=200; 
	m_para.m_page1.m_fGainVelocity=0.1f; 
    m_para.m_page1.m_fPusleNumber=1;  
    m_para.m_page1.m_nCONGain=200; 
	m_para.m_page3.m_LeftAxis=0; 
    m_para.m_page3.m_RightAxis=1; 
	m_para.m_page3.m_fLeftx=3.00f; 
    m_para.m_page3.m_fLefty=3.00f; 
    m_para.m_page3.m_fRightx=3.00f; 
    m_para.m_page3.m_fRighty=1.00f; 
	m_para.m_page3.m_fTraceToTrace=0.20f; 
	 
	m_para.m_page3.m_nTimeFrom=0; 
    m_para.m_page3.m_nTimeTo=400; 
	m_para.m_page3.m_nTraceFrom=1; 
	m_para.m_page3.m_nTraceTo=50; 
    m_para.m_page3.m_fTraceWidth=0.4f; 
    m_para.m_page3.m_fVAxisLength=10.0f; 
    m_para.m_page3.m_fHAxisLength=m_nHAxisLength/100.0f; 
 
	m_para.m_page4.m_DisplaySelect=0; 
    m_para.m_page4.m_FillSelect=1; 
    m_para.m_page4.m_GraySelect=1; 
    m_para.m_page4.m_DisplayWave=true; 
    m_para.m_page4.m_nMaxMinGray=m_nMaxMin; 
	m_para.m_page4.m_nGrayFrom=m_nGrayFrom; 
    m_para.m_page4.m_nGrayTo=m_nGrayTo; 
 
	m_para.m_page5.m_fVelocity=0.1f; 
 
	m_para.SetTitle("参数设置"); 
} 
 
CRadarView::~CRadarView() 
{ 
} 
 
BOOL CRadarView::PreCreateWindow(CREATESTRUCT& cs) 
{ 
	// TODO: Modify the Window class or styles here by modifying 
	//  the CREATESTRUCT cs 
 
	return CScrollView::PreCreateWindow(cs); 
} 
 
///////////////////////////////////////////////////////////////////////////// 
// CRadarView drawing 
 
void CRadarView::OnDraw(CDC* pDC) 
{ 
	CRadarDoc* pDoc = GetDocument(); 
	ASSERT_VALID(pDoc); 
	// TODO: add draw code for native data here 
     
	pDC->SetMapMode(MM_LOMETRIC); 
	CRect rect1; 
	rect1=bb.m_BitRect; 
	pDC->LPtoDP(&rect1); 
    CSize size(rect1.Width(),-rect1.Height()); 
	 
	if(pDoc->m_bFileOpened==true) 
	{    
	     
         
		if( m_nTraceFrom<1 || m_nTraceTo> pDoc->m_nTotalTraceNumber 
			|| m_nTraceFrom>m_nTraceTo) 
		{   
		       m_nTraceFrom=1;  
	           m_para.m_page3.m_nTraceFrom=1; 
		} 
	    if(m_nTraceTo<1 || m_nTraceTo>pDoc->m_nTotalTraceNumber) 
		{   
		       m_nTraceTo=pDoc->m_nTotalTraceNumber;   
               m_para.m_page3.m_nTraceTo=m_nTraceTo; 
		} 
		if(m_nTimeFrom<0 || m_nTimeFrom>int(pDoc->m_nTimeWindow-pDoc->m_nTimeZeroPoint*pDoc->m_fSampleTime) 
			|| m_nTimeFrom>m_nTimeTo) 
		{ 
			m_nTimeFrom=0; 
			m_para.m_page3.m_nTimeFrom=0; 
		} 
		 
		if(m_nTimeTo<0|| m_nTimeTo>int(pDoc->m_nTimeWindow-pDoc->m_nTimeZeroPoint*pDoc->m_fSampleTime)) 
		{ 
			m_nTimeTo=int(pDoc->m_nTimeWindow-pDoc->m_nTimeZeroPoint*pDoc->m_fSampleTime); 
			 
			m_para.m_page3.m_nTimeTo=m_nTimeTo; 
		} 
	      
        m_nPointFrom=int(m_nTimeFrom/pDoc->m_fSampleTime); 
		m_nPointTo=int(m_nTimeTo/pDoc->m_fSampleTime); 
        PointStep=float(m_nVAxisLength)/(m_nPointTo-m_nPointFrom); 
         
               
		if(m_bBitmapIsNone==true) 
		{ 
        
	     //创建空位图 
	     bb.CreateBitmapEx(size);//创建位图大小 
	     CBrush brush; 
	     brush.CreateSolidBrush(m_BkColor); 
	     bb.GetDC()->FillRect(CRect(0,0,size.cx,size.cy),&brush); 
	     bb.GetDC()->SetMapMode(MM_LOMETRIC); 
	     CPen Pen(NULL,1,m_WaveColor); 
	     bb.GetDC()->SelectObject(&Pen); 
	     //自画位图 
        switch(m_para.m_page4.m_DisplaySelect) 
		{   
		  case 0:   ShowWave(bb.GetDC()); break; 
          case 1:   ShowGray(bb.GetDC()); break; 
		  case 2:   ShowColor(bb.GetDC());break; 
		} 
         bb.PrepareBitmap();//把内存环境的屏幕像素转化到位图中 
         
         bb.SaveBitmap("book2.bmp"); 
	     m_bBitmapIsNone=false; 
		} 
 
       CDC dcComp; 
	   dcComp.CreateCompatibleDC(pDC); 
	   dcComp.SelectObject(&bb); 
	   // draw bitmap 
	   CRect rect2(0,0,bb.m_Width,bb.m_Height); 
       pDC->DPtoLP(&rect2); 
       pDC->StretchBlt(0,0,rect2.Width(),rect2.Height(), &dcComp, 0,0,size.cx,size.cy,SRCCOPY); 
	  
	} 
} 
 
void CRadarView::OnInitialUpdate() 
{ 
	CScrollView::OnInitialUpdate(); 
    CSize sizeTotal; 
	// TODO: calculate the total size of this view 
	sizeTotal.cx = 2000; 
	sizeTotal.cy = 1000; 
	SetScrollSizes(MM_TEXT, sizeTotal); 
} 
 
///////////////////////////////////////////////////////////////////////////// 
// CRadarView printing 
 
BOOL CRadarView::OnPreparePrinting(CPrintInfo* pInfo) 
{ 
	// default preparation 
	return DoPreparePrinting(pInfo); 
} 
 
void CRadarView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/) 
{ 
	// TODO: add extra initialization before printing 
} 
 
void CRadarView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/) 
{ 
	// TODO: add cleanup after printing 
} 
 
///////////////////////////////////////////////////////////////////////////// 
// CRadarView diagnostics 
 
#ifdef _DEBUG 
void CRadarView::AssertValid() const 
{ 
	CScrollView::AssertValid(); 
} 
 
void CRadarView::Dump(CDumpContext& dc) const 
{ 
	CScrollView::Dump(dc); 
} 
 
CRadarDoc* CRadarView::GetDocument() // non-debug version is inline 
{ 
	ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CRadarDoc))); 
	return (CRadarDoc*)m_pDocument; 
} 
#endif //_DEBUG 
 
///////////////////////////////////////////////////////////////////////////// 
// CRadarView message handlers 
 
void CRadarView::OnRButtonDown(UINT nFlags, CPoint point)  
{ 
	// TODO: Add your message handler code here and/or call default 
	 
	if(GetDocument()->m_bFileOpened==false) 
    { 
		  AfxMessageBox("请先输入文件!"); 
	} 
	else 
	{ 
	    m_para.DoModal(); 
	} 
     
	CScrollView::OnRButtonDown(nFlags, point); 
} 
 
LRESULT CRadarView::OnUserApply(WPARAM wParam,LPARAM lParam) 
{ 
    int n; 
 
	CRadarDoc* pDoc=GetDocument(); 
	n=m_para.m_page1.m_nSECAbsorb; 
    pDoc->m_fAbsorb=(float)m_para.m_page1.m_nSECAbsorb; 
    pDoc->m_nAGCMaxGain=m_para.m_page1.m_nAGCMaxGain; 
    pDoc->m_nSECMaxGain=m_para.m_page1.m_nSECMaxGain; 
    pDoc->m_fPusleNumber=m_para.m_page1.m_fPusleNumber; 
	pDoc->m_nCONGain=m_para.m_page1.m_nCONGain; 
	pDoc->m_fGainVelocity=m_para.m_page1.m_fGainVelocity; 
	 
	pDoc->m_nPointAverage=m_para.m_page2.m_nPointAverage; 
	pDoc->m_nTraceAverage=m_para.m_page2.m_nTraceAverage; 
 
	m_nLeftx=int(m_para.m_page3.m_fLeftx*100); 
	m_nLefty=int(m_para.m_page3.m_fLefty*100); 
    m_nRightx=int(m_para.m_page3.m_fRightx*100); 
	m_nRighty=int(m_para.m_page3.m_fRighty*100); 
	m_nTraceToTrace=int(m_para.m_page3.m_fTraceToTrace*100); 
	m_nVAxisLength=int(m_para.m_page3.m_fVAxisLength*100); 
     
	 
	m_nTraceFrom=m_para.m_page3.m_nTraceFrom; 
	m_nTraceTo=m_para.m_page3.m_nTraceTo; 
	m_nTimeFrom=m_para.m_page3.m_nTimeFrom; 
	m_nTimeTo=m_para.m_page3.m_nTimeTo; 
    m_nHAxisLength=m_nTraceToTrace*(m_nTraceTo-m_nTraceFrom); 
	 
    m_para.m_page3.m_fHAxisLength=m_nHAxisLength/100.0f; 
    m_nTraceWidth=int(m_para.m_page3.m_fTraceWidth*100);    
 
	m_nMaxMin=m_para.m_page4.m_nMaxMinGray; 
    switch(m_para.m_page4.m_FillSelect) 
	{    
	    case 0: m_bFillLeft=true; m_bFillRight=false;  break; 
		case 1: m_bFillRight=true; m_bFillLeft=false;  break; 
	    case 2:	m_bFillLeft=false; m_bFillRight=false; break; 
	} 
    m_bShowWaveLine=m_para.m_page4.m_DisplayWave; 
    m_nGrayFrom=m_para.m_page4.m_nGrayFrom; 
	m_nGrayTo=m_para.m_page4.m_nGrayTo; 
    bb.m_BitRect.SetRect(0,0,m_nLeftx+m_nRightx+m_nTraceWidth+m_nTraceToTrace*(m_nTraceTo-m_nTraceFrom), 
		m_nLefty+m_nRighty+m_nVAxisLength); 
 
	pDoc->m_fVelocity=m_para.m_page5.m_fVelocity; 
 
	bb.DeleteObject(); 
	m_bBitmapIsNone=true; 
	Invalidate(true); 
	return 0; 
} 
 
void CRadarView::ShowWave(CDC *pDC) 
{ 
    CRadarDoc* pDoc = GetDocument(); 
	ASSERT_VALID(pDoc); 
	 
	// TODO: add draw code for native data here 
	int i,j; 
	int x0,y0,x1,y1,x2; 
     
	CPoint pt[4]; 
	bool onefill,twofill,threefill; 
		 
    CBrush brush(m_WaveColor); 
	pDC->SelectObject(&brush); 
	CPen Pen(NULL,1,m_WaveColor); 
	pDC->SelectObject(&Pen); 
	short* seis=new short[pDoc->m_nPtsOfTrace]; 
    for(i=m_nTraceFrom-1;im_nPtsOfTrace;j++) 
			seis[j]=pDoc->Data[i][j]; 
				 
			if(pDoc->m_nTraceAverage!=1) 
			{  pDoc->TraceAverage(seis,i,pDoc->m_nTraceAverage);} 
			 
			if(pDoc->m_nPointAverage!=1) 
			{  pDoc->PointAverage(seis,pDoc->m_nPointAverage);} 
			 
		     
			switch(m_para.m_page1.m_GainSelect) 
			{ 
			case 0:	pDoc->AGCGain(seis); break; 
			case 1: pDoc->SECGain(seis); break; 
			case 2: pDoc->CONGain(seis); break; 
			case 3: break; 
			case 4: break; 
			default: break; 
			} 
			 
          		 
			x0=m_nLeftx+(i-m_nTraceFrom)*m_nTraceToTrace+ 
				m_nTraceWidth/2+m_nTraceToTrace; 
			y0=-m_nLefty; 
			for(j=m_nPointFrom+pDoc->m_nTimeZeroPoint;j<=m_nPointTo+pDoc->m_nTimeZeroPoint;j++) 
			 { 
               // /*      ***画波线***    */ 
			   if(m_bShowWaveLine) 
			   { 
			     x1=seis[j]; 
			     if(j+1>pDoc->m_nPtsOfTrace) x2=0; 
			     x2=seis[j+1]; 
			     if(j==m_nPointFrom+pDoc->m_nTimeZeroPoint) 
					{ 
				     x1=x0+int(seis[j]*m_nTraceWidth*0.5/32767); 
					 y1=y0-int((j-m_nPointFrom-pDoc->m_nTimeZeroPoint)*PointStep); 
					 pDC->MoveTo(x1,y1); 
					} 
			     if((x1>0&&x2<0)||(x1<0&&x2>0)) 
					{ 
				     x1=x0+int(seis[j]*m_nTraceWidth*0.5/32767); 
					 y1=y0-int((j-m_nPointFrom-pDoc->m_nTimeZeroPoint)*PointStep); 
					 pDC->LineTo(x1,y1); 
					 if(j!=m_nPointTo+pDoc->m_nTimeZeroPoint) 
							{  x1=x0;	 y1=y1-int(PointStep*0.5); 
					           pDC->LineTo(x1,y1); 
							} 
					} 
			     else 
					{ 
				      x1=x0+int(seis[j]*m_nTraceWidth*0.5/32767); 
					  y1=y0-int((j-m_nPointFrom-pDoc->m_nTimeZeroPoint)*PointStep); 
					  pDC->LineTo(x1,y1); 
					}  
			   } 
               /*      ***画波线***    */    
			    
			   /*      ***填充波***    */ 
			   if(m_bFillRight==true||m_bFillLeft==true) 
			   { 
                 if(j==m_nPointTo+pDoc->m_nTimeZeroPoint) break; 
			     x1=seis[j]; 
			     x2=seis[j+1]; 
			    
				 if(m_bFillRight==true)	{ 
					                     onefill=(x1>=0&&x2>=0); 
										 twofill=(x1>0&&x2<0); 
										 threefill=(x1<0&&x2>0); 
										} 
				 if(m_bFillLeft==true)  { 
										 onefill=(x1<=0&&x2<=0); 
										 twofill=(x1<0&&x2>0); 
										 threefill=(x1>0&&x2<0); 
										} 
				 if(onefill) 
					{ 
				      pt[0].x=x0;  
					  pt[0].y=y0-int((j-m_nPointFrom-pDoc->m_nTimeZeroPoint)*PointStep); 
					  pt[1].x=x0+int(seis[j]*m_nTraceWidth*0.5/32767); 
					  pt[1].y=pt[0].y; 
					  pt[2].x=x0+int(seis[j+1]*m_nTraceWidth*0.5/32767); 
					  pt[2].y=int(pt[1].y-PointStep); 
					  pt[3].x=x0; 
					  pt[3].y=pt[2].y; 
                      pDC->Polygon(pt,4); 
					} 
                 if(twofill) 
					{ 
				      pt[0].x=x0;  
					  pt[0].y=y0-int((j-m_nPointFrom-pDoc->m_nTimeZeroPoint)*PointStep); 
					  pt[1].x=x0+int(seis[j]*m_nTraceWidth*0.5/32767); 
					  pt[1].y=pt[0].y; 
					  pt[2].x=x0; 
					  pt[2].y=int(pt[1].y-PointStep/2); 
					  pt[3].x=x0; 
					  pt[3].y=pt[2].y; 
                      pDC->Polygon(pt,4); 
					}   
                 if(threefill) 
					{ 
				      pt[0].x=x0;  
					  pt[0].y=y0-int((j-m_nPointFrom-pDoc->m_nTimeZeroPoint)*PointStep+PointStep/2); 
					  pt[1].x=x0; 
					  pt[1].y=pt[0].y; 
					  pt[2].x=x0+int(seis[j+1]*m_nTraceWidth*0.5/32767); 
					  pt[2].y=y0-int((j+1-m_nPointFrom-pDoc->m_nTimeZeroPoint)*PointStep); 
					  pt[3].x=x0; 
					  pt[3].y=pt[2].y; 
                      pDC->Polygon(pt,4); 
					}   
			   } 
               /*        ***填充波***    */  
			 }//点循环 
 
	}//道循环 
    delete []seis; 
} 
 
void CRadarView::ShowGray(CDC *pDC) 
{ 
     CRadarDoc* pDoc = GetDocument(); 
	ASSERT_VALID(pDoc); 
	 
	// TODO: add draw code for native data here 
	int i,j,n,m; 
	int top,bottom,right,left; 
	int x0,y0,f,f1,f2,f3,f4; 
	float u,v; 
    float MaxMin; 
	short** seis; 
	CPoint pt; 
    CRect rect; 
	 
    if(m_nTraceTo==m_nTraceFrom) return ; 
    seis=pDoc->Create2DShortArray(m_nTraceTo-m_nTraceFrom+1,pDoc->m_nPtsOfTrace); 
   
   
    for(i=m_nTraceFrom-1;im_nPtsOfTrace;j++) 
		{ 
			seis[i-m_nTraceFrom+1][j]=pDoc->Data[i][j]; 
		} 
        if(pDoc->m_nTraceAverage!=1) 
			  pDoc->TraceAverage(seis[i-m_nTraceFrom+1],i,pDoc->m_nTraceAverage); 
		if(pDoc->m_nPointAverage!=1) 
		      pDoc->PointAverage(seis[i-m_nTraceFrom+1],pDoc->m_nPointAverage);  
		switch(m_para.m_page1.m_GainSelect) 
			{ 
			case 0:	pDoc->AGCGain(seis[i-m_nTraceFrom+1]); break; 
			case 1: pDoc->SECGain(seis[i-m_nTraceFrom+1]); break; 
			case 2: pDoc->CONGain(seis[i-m_nTraceFrom+1]); break; 
			case 3: break; 
			case 4: break; 
			default: break; 
			} 
			    
	} 
   	 
	for(i=0;im_nTimeZeroPoint;j<=m_nPointTo+pDoc->m_nTimeZeroPoint;j++) 
			 { 
              ///*      ***画灰度***     
			    
                   rect.TopLeft().y=y0-int((j-m_nPointFrom-pDoc->m_nTimeZeroPoint)*PointStep); 
                   rect.BottomRight().y=y0-int((j+1-m_nPointFrom-pDoc->m_nTimeZeroPoint)*PointStep); 
				   rect.TopLeft().x=x0; 
				   rect.BottomRight().x=x0+m_nTraceToTrace; 
				    
				   pDC->LPtoDP(&rect); 
 
				   top=rect.TopLeft().y; 
				   bottom=rect.BottomRight().y; 
				   left=rect.TopLeft().x; 
				   right=rect.BottomRight().x; 
 
				   MaxMin=m_nMaxMin/32767.0f; 
                   f1= PointGrayValue(m_nGrayFrom,m_nGrayTo,MaxMin,seis[i][j]/32767.0f);   //top left 
				   f2= PointGrayValue(m_nGrayFrom,m_nGrayTo,MaxMin,seis[i+1][j]/32767.0f);   //top right 
				   f3= PointGrayValue(m_nGrayFrom,m_nGrayTo,MaxMin,seis[i][j+1]/32767.0f); //bottom left 
				   f4= PointGrayValue(m_nGrayFrom,m_nGrayTo,MaxMin,seis[i+1][j+1]/32767.0f); //bottom right 
                   
                   for(n=left;n<=right;n++) 
				   { 
                       for(m=top;m<=bottom;m++) 
					   { 
						   if(right-left==0||bottom-top==0)continue; 
                           u=(float)(n-left)/(right-left); 
						   v=(float)(m-top)/(bottom-top); 
						   f=int((1-u)*(1-v)*f1+(1-u)*v*f3+u*(1-v)*f2+u*v*f4); 
						   pt.x=n; pt.y=m; 
						   pDC->DPtoLP(&pt); 
						   pDC->SetPixelV(pt,RGB(f,f,f)); 
                       } 
				   }  
			 //      ***画灰度***     
			   
			 }//点循环 
        
	}//道循环 
    delete []seis; 
	 
} 
void CRadarView::ShowColor(CDC *pDC) 
{ 
    CRadarDoc* pDoc = GetDocument(); 
	ASSERT_VALID(pDoc); 
	 
	// TODO: add draw code for native data here 
	int i,j,n,m; 
	int top,bottom,right,left; 
	int x0,y0; 
	float f,f1,f2,f3,f4; 
	float u,v; 
    short** seis; 
	COLORREF rgb; 
	CPoint pt; 
	CRect rect; 
		 
    if(m_nTraceTo==m_nTraceFrom) return ; 
    seis=pDoc->Create2DShortArray(m_nTraceTo-m_nTraceFrom+1,pDoc->m_nPtsOfTrace); 
   
   
    for(i=m_nTraceFrom-1;im_nPtsOfTrace;j++) 
		{ 
			seis[i-m_nTraceFrom+1][j]=pDoc->Data[i][j]; 
		} 
        if(pDoc->m_nTraceAverage!=1) 
			  pDoc->TraceAverage(seis[i-m_nTraceFrom+1],i,pDoc->m_nTraceAverage); 
		if(pDoc->m_nPointAverage!=1) 
		      pDoc->PointAverage(seis[i-m_nTraceFrom+1],pDoc->m_nPointAverage);  
		switch(m_para.m_page1.m_GainSelect) 
			{ 
			case 0:	pDoc->AGCGain(seis[i-m_nTraceFrom+1]); break; 
			case 1: pDoc->SECGain(seis[i-m_nTraceFrom+1]); break; 
			case 2: pDoc->CONGain(seis[i-m_nTraceFrom+1]); break; 
			case 3: break; 
			case 4: break; 
			default: break; 
			} 
			    
	} 
    
	for(i=0;im_nTimeZeroPoint;j<=m_nPointTo+pDoc->m_nTimeZeroPoint;j++) 
			 { 
              ///*      ***画伪色***     
			    
                   rect.TopLeft().y=y0-int((j-m_nPointFrom-pDoc->m_nTimeZeroPoint)*PointStep); 
                   rect.BottomRight().y=y0-int((j+1-m_nPointFrom-pDoc->m_nTimeZeroPoint)*PointStep); 
                   rect.TopLeft().x=x0; 
				   rect.BottomRight().x=x0+m_nTraceToTrace; 
				    
				   pDC->LPtoDP(&rect); 
 
				   top=rect.TopLeft().y; 
				   bottom=rect.BottomRight().y; 
				   left=rect.TopLeft().x; 
				   right=rect.BottomRight().x; 
 
                   f1=seis[i][j]/32767.0f;   //top left 
				   f2=seis[i+1][j]/32767.0f;   //top right 
				   f3=seis[i][j+1]/32767.0f; //bottom left 
				   f4=seis[i+1][j+1]/32767.0f; //bottom right 
                   
				   for(n=left;n<=right;n++) 
				   { 
                       for(m=top;m<=bottom;m++) 
					   { 
						   if(right-left==0||bottom-top==0)continue; 
                           u=(float)(n-left)/(right-left); 
						   v=(float)(m-top)/(bottom-top); 
						   f=(1-u)*(1-v)*f1+(1-u)*v*f3+u*(1-v)*f2+u*v*f4; 
                           rgb=RGB(PointRedValue(f),PointGreenValue(f),PointBlueValue(f)); 
						   pt.x=n; pt.y=m; 
						   pDC->DPtoLP(&pt); 
						   pDC->SetPixelV(pt,rgb);// 
                       } 
				   } 
 
			 //       ***画伪色***      
			   
			 }//点循环 
        
	}//道循环 
    delete []seis; 
 
} 
int CRadarView::PointGrayValue(int m_nGrayFrom,int m_nGrayTo,float MaxMin,float ptValue) 
{     
	 int PtGrayValue; 
	 if(ptValue>MaxMin) 
	 {  
		 PtGrayValue=m_nGrayTo; 
	 } 
	 else if(ptValue<-MaxMin) 
	 { 
		 PtGrayValue=m_nGrayFrom;  
	 } 
	 else 
	 { 
 	   PtGrayValue=int((m_nGrayTo-m_nGrayFrom)*(ptValue+MaxMin)*0.5/MaxMin)+m_nGrayFrom; 
     } 
	 return PtGrayValue;  
} 
int CRadarView::PointRedValue(float ptValue) 
{     
	 int RedValue; 
	 if(ptValue<0) 
	 {  
		 RedValue=0; 
	 } 
	 else if(ptValue>0.5) 
	 { 
		 RedValue=255;  
	 } 
	 else 
	 { 
 	   RedValue=int(510*ptValue); 
     } 
	 return RedValue;  
} 
int CRadarView::PointGreenValue(float ptValue) 
{     
	 int GreenValue; 
	 if(ptValue<-0.5) 
	 {  
		 GreenValue=int(510*(ptValue)); 
	 } 
	 else if(ptValue>0.5) 
	 { 
		GreenValue=int(510*(1-ptValue));  
	 } 
	 else 
	 { 
 	   GreenValue=255; 
     } 
	 return GreenValue;  
} 
int CRadarView::PointBlueValue(float ptValue) 
{     
	 int BlueValue; 
	 if(ptValue<-0.5) 
	 {  
		 BlueValue=255; 
	 } 
	 else if(ptValue>0) 
	 { 
		 BlueValue=0;  
	 } 
	 else 
	 { 
 	   BlueValue=int(-510*ptValue); 
     } 
	 return BlueValue;  
} 
 
void CRadarView::OnFilePrint()  
{ 
	// TODO: Add your command handler code here 
	CScrollView::OnFilePrint(); 
} 
 
void CRadarView::OnFilePrintPreview()  
{ 
	// TODO: Add your command handler code here 
	CScrollView::OnFilePrintPreview(); 
} 
 
void CRadarView::OnPrint(CDC* pDC, CPrintInfo* pInfo)  
{ 
	// TODO: Add your specialized code here and/or call the base class 
	if(!m_bBitmapIsNone) 
	{ 
	  pDC->SetMapMode(MM_LOMETRIC); 
	  bb.Print(pDC); 
	} 
	CScrollView::OnPrint(pDC, pInfo); 
} 
 
void CRadarView::OnHLong()  
{ 
	// TODO: Add your command handler code here 
		 
	    m_nTraceToTrace=m_nTraceToTrace+5; 
		m_nTraceWidth=2*5+m_nTraceWidth; 
		m_para.m_page3.m_fTraceToTrace=m_nTraceToTrace/100.0f; 
        m_para.m_page3.m_fTraceWidth=m_nTraceWidth/100.0f; 
		m_bBitmapIsNone=true; 
        bb.m_BitRect.SetRect(0,0,m_nLeftx+m_nRightx+m_nTraceWidth+m_nTraceToTrace*(m_nTraceTo-m_nTraceFrom), 
		m_nLefty+m_nRighty+m_nVAxisLength); 
 
		bb.DeleteObject(); 
		Invalidate(); 
} 
 
void CRadarView::OnHShort()  
{ 
	// TODO: Add your command handler code here 
        m_nTraceToTrace=m_nTraceToTrace-5; 
		m_nTraceWidth=m_nTraceWidth-2*5; 
		m_para.m_page3.m_fTraceToTrace=m_nTraceToTrace/100.0f; 
        m_para.m_page3.m_fTraceWidth=m_nTraceWidth/100.0f; 
		m_bBitmapIsNone=true; 
        bb.m_BitRect.SetRect(0,0,m_nLeftx+m_nRightx+m_nTraceWidth+m_nTraceToTrace*(m_nTraceTo-m_nTraceFrom), 
		m_nLefty+m_nRighty+m_nVAxisLength); 
 
		bb.DeleteObject(); 
		Invalidate(); 
} 
 
void CRadarView::OnVLong()  
{ 
	// TODO: Add your command handler code here 
	    m_nVAxisLength=m_nVAxisLength+200; 
		m_para.m_page3.m_fVAxisLength=m_nVAxisLength/100.0f; 
        m_bBitmapIsNone=true; 
        bb.m_BitRect.SetRect(0,0,m_nLeftx+m_nRightx+m_nTraceWidth+m_nTraceToTrace*(m_nTraceTo-m_nTraceFrom), 
		m_nLefty+m_nRighty+m_nVAxisLength); 
 
		bb.DeleteObject(); 
		Invalidate(); 
} 
 
void CRadarView::OnUpdateHlong(CCmdUI* pCmdUI)  
{ 
	// TODO: Add your command update UI handler code here 
	pCmdUI->Enable(GetDocument()->m_bFileOpened); 
} 
 
void CRadarView::OnVShort()  
{ 
	// TODO: Add your command handler code here 
	    m_nVAxisLength=m_nVAxisLength-200; 
		m_para.m_page3.m_fVAxisLength=m_nVAxisLength/100.0f; 
        m_bBitmapIsNone=true; 
        bb.m_BitRect.SetRect(0,0,m_nLeftx+m_nRightx+m_nTraceWidth+m_nTraceToTrace*(m_nTraceTo-m_nTraceFrom), 
		m_nLefty+m_nRighty+m_nVAxisLength); 
 
		bb.DeleteObject(); 
		Invalidate(); 
} 
 
void CRadarView::OnUpdateHshort(CCmdUI* pCmdUI)  
{ 
	// TODO: Add your command update UI handler code here 
	pCmdUI->Enable(GetDocument()->m_bFileOpened); 
} 
 
void CRadarView::OnUpdateVlong(CCmdUI* pCmdUI)  
{ 
	// TODO: Add your command update UI handler code here 
	pCmdUI->Enable(GetDocument()->m_bFileOpened); 
} 
 
void CRadarView::OnUpdateVshort(CCmdUI* pCmdUI)  
{ 
	// TODO: Add your command update UI handler code here 
	pCmdUI->Enable(GetDocument()->m_bFileOpened); 
} 
 
void CRadarView::OnImageSave()  
{ 
	// TODO: Add your command handler code here 
	CString SaveFile; 
		CFileDialog dlg(false,"dt1","*.bmp",OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,"data Files(*.bmp)|*.bmp||"); 
	if(!m_bBitmapIsNone) 
	{    
		if(dlg.DoModal()==IDOK) 
		{    
			SaveFile=dlg.GetPathName(); 
		    bb.SaveBitmap(SaveFile); 
		} 
	} 
}