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

📄 showsgyview.cpp

📁 用Visual C++编写的地震记录显示程序
💻 CPP
字号:
// showsgyView.cpp : implementation of the CShowsgyView class
//

#include "stdafx.h"
#include "showsgy.h"
#include "ShowInline.h"
#include "showsgyDoc.h"
#include "showsgyView.h"
#include "Seismic_Data.h"

#include "wzdbtmap.h"
#include "info3d.h"
#include "Time_Slice.h"
#include "display_config.h"
#include "current_infor.h"
#include "histeq.h"
#include "layer.h"
 
#include "Xline_number.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CShowsgyView

IMPLEMENT_DYNCREATE(CShowsgyView, CScrollView)

BEGIN_MESSAGE_MAP(CShowsgyView, CScrollView)
	//{{AFX_MSG_MAP(CShowsgyView)
	ON_COMMAND(IDC_Inline, OnInline)
	ON_COMMAND(ID_MENUITEM32773, OnMenuitem32773)
	ON_COMMAND(IDC_Xline, OnXline)
	ON_COMMAND(IDC_Timeslice, OnTimeslice)
	ON_COMMAND(ID_MENUITEM32778, OnMenuitem32778)
	ON_COMMAND(ID_Inform, OnInform)
	ON_COMMAND(IDC_LAYER, OnLayer)

	//}}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)
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CShowsgyView construction/destruction
CString InputFile;
CSize   sizeTotal;
long nx,ny,nz,samprate,ibm,First,token,nxx,nyy;
int px,py,pz,pImage,imangel;
float *xyz; 
int *stime;
CShowsgyView::CShowsgyView()
{
	// TODO: add construction code here
	InputFile=_T("");
	BlankFile=_T("");
	sizeTotal.cx=sizeTotal.cy=100;
	nx=ny=nz=ibm=samprate=0;
	First=0;
	xyz=new float[1000];
	print=0;
	token=0;
 
	px=5;
	py=2;
	pz=15;
	pImage=1;
	imangel=0;
	mybitmap=new CWzdBitmap;
	mybitmap->m_Height=0;
	mybitmap->m_Width=0; 
	m_welcome.welcome();
	map_number=1;

 
}

CShowsgyView::~CShowsgyView()
{
	 	 
}

BOOL CShowsgyView::PreCreateWindow(CREATESTRUCT& cs)
{
	// TODO: Modify the Window class or styles here by modifying
	//  the CREATESTRUCT cs

	return CScrollView::PreCreateWindow(cs);
}

/////////////////////////////////////////////////////////////////////////////
// CShowsgyView drawing
#include "readsgy.h"

void CShowsgyView::OnDraw(CDC* pDC)
{
	CShowsgyDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	 
	 
	// TODO: add draw code for native data here
    switch (token)
	{
	case -1:
		{
			sizeTotal.cx=sizeTotal.cy=100;
			break;
		}

	case 0:
		{
			sizeTotal.cx =nxx*px+200;
			sizeTotal.cy = py*nyy+200;
			break;
		}
	case 1:
	case 2:
		{
			switch (imangel)
			{
			case 0:
			case 2:
				{
					sizeTotal.cx =nxx+200;
					sizeTotal.cy = nyy+200;
					break;
				}
			case 1:
			case 3:
				{
					sizeTotal.cx =nyy+200;
					sizeTotal.cy =nxx+200;
					break;
				}
			
			break;
			}
		}
		
	}
	
	SetScrollSizes(MM_TEXT, sizeTotal);
	
	if(xyz!=NULL) switch (token) 	
	{
		case -1:
			{
				CDC init1;
				init1.CreateCompatibleDC(pDC);
				init1.SelectObject(&m_welcome);
				pDC->BitBlt(0,0,m_welcome.m_Width,m_welcome.m_Height, &init1, 0,0,SRCCOPY); 
				break;
			}
		case 0:
		case 1:
		case 2:
			{
				CDC dcComp;
				dcComp.CreateCompatibleDC(pDC);
				dcComp.SelectObject(mybitmap);
				// draw bitmap
				pDC->BitBlt(10,10,mybitmap->m_Width ,mybitmap->m_Height , &dcComp, 0,0,SRCCOPY); 
				break;
			}
	}
	 
}

 void CShowsgyView::OnInitialUpdate()
 {
	 CScrollView::OnInitialUpdate();

	
	// TODO: calculate the total size of this view
	// sizeTotal.cx = sizeTotal.cy = 2000;

    SetScrollSizes(MM_TEXT, sizeTotal);
 }

/////////////////////////////////////////////////////////////////////////////
// CShowsgyView printing

BOOL CShowsgyView::OnPreparePrinting(CPrintInfo* pInfo)
{
	// default preparation
	print=1; 
	pInfo->SetMinPage(1);
    pInfo->SetMaxPage(1);
	return DoPreparePrinting(pInfo);
}

void CShowsgyView::OnBeginPrinting(CDC*  pDC , CPrintInfo* pInfo)
{
	// TODO: add extra initialization before printing
}

void CShowsgyView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: add cleanup after printing
}

/////////////////////////////////////////////////////////////////////////////
// CShowsgyView diagnostics

#ifdef _DEBUG
void CShowsgyView::AssertValid() const
{
	CScrollView::AssertValid();
}

void CShowsgyView::Dump(CDumpContext& dc) const
{
	CScrollView::Dump(dc);
}

CShowsgyDoc* CShowsgyView::GetDocument() // non-debug version is inline
{
	ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CShowsgyDoc)));
	return (CShowsgyDoc*)m_pDocument;
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CShowsgyView message handlers

void CShowsgyView::OnPrepareDC(CDC* pDC, CPrintInfo* pInfo) 
{
	// TODO: Add your specialized code here and/or call the base class
	
	CScrollView::OnPrepareDC(pDC, pInfo);
	if(pDC->IsPrinting())
	{

	pDC->SetMapMode(MM_ANISOTROPIC);  //转换坐标映射方式
	CSize size = CSize(800, 560);
	pDC->SetWindowExt(size);  //确定窗口大小
	
	//得到实际设备每逻辑英寸的像素数量
	int xLogPixPerInch = pDC->GetDeviceCaps(LOGPIXELSX); 
	int yLogPixPerInch = pDC->GetDeviceCaps(LOGPIXELSY);
		
	//得到设备坐标和逻辑坐标的比例
	long xExt = (long)(size.cx * xLogPixPerInch/96);
	long yExt = (long)(size.cy * yLogPixPerInch/96);
	pDC->SetViewportExt((int)xExt, (int)yExt);	//设置视口大小
	    
	}

	CView::OnPrepareDC(pDC, pInfo);
}

DROPEFFECT CShowsgyView::OnDragEnter(COleDataObject* pDataObject, DWORD dwKeyState, CPoint point) 
{
	// TODO: Add your specialized code here and/or call the base class
	
	return CScrollView::OnDragEnter(pDataObject, dwKeyState, point);
}

void CShowsgyView::OnInline() 
{
	// TODO: Add your command handler code here
    char ss[20];

	ShowInline dlg;
	long    lineno;
	wsprintf(ss,"[1-%d]",nx);
	dlg.m_Inlinerange=CString(ss);

		if(dlg.DoModal()==IDOK)  lineno=dlg.m_Inline_Number-1;
	if(nx>0)
	{
		delete xyz;
		xyz=new float[ny*nz];
		iline(InputFile,xyz,nx,ny,nz,lineno);

 		nxx=ny;
		nyy=nz;
		ReadytoDraw();
	}
	else 	return;
	 
}

void CShowsgyView::OnMenuitem32773() 
{
	// TODO: Add your command handler code here
	Seismic_Data dlg;
	dlg.m_InputFile=InputFile;
	dlg.m_lx=nx;
	dlg.m_ly=ny;
	dlg.m_lz=nz;
	dlg.m_lsamp=samprate;
	dlg.m_BlankFile=BlankFile; 
	if(dlg.DoModal()==IDOK) 
	{
		InputFile=dlg.m_InputFile;
		nx=dlg.m_lx;
		ny=dlg.m_ly;
		nz=dlg.m_lz;
		samprate=dlg.m_lsamp;
		BlankFile=dlg.m_BlankFile; 
		if(stime!=NULL) delete stime;
		stime=new int[nx*ny];
		
		mybitmap->m_Height =0;
		mybitmap->m_Width =0;
		if((nx==1)||(ny==1))
		{
			ny=nx*ny;
			nx=1;
			delete xyz;
			xyz=new float[ny*nz*4L];
			iline(InputFile,xyz,nx,ny,nz,1);
			nxx=ny;
			nyy=nz;
		}
       	ReadytoDraw();
	}
}

void CShowsgyView::OnXline() 
{
	// TODO: Add your command handler code here
    char ss[20]; 
	Xline_number dlg;
	long    lineno;
	wsprintf(ss,"[1-%d]",ny);
	dlg.m_xlinerange=CString(ss);
	if(dlg.DoModal()==IDOK)  lineno=dlg.m_xlineno-1;
	if(ny>0) 
	{
		if(xyz!=NULL) delete xyz;
		xyz=new float[nx*nz];
		xline(InputFile,xyz,nx,ny,nz,lineno);
		nxx=nx;
		nyy=nz;
 		ReadytoDraw();
	}
	else return; 
}

void CShowsgyView::OnTimeslice() 
{
	// TODO: Add your command handler code here
	Time_Slice dlg;
	char ss[20];
	long    lineno;
	wsprintf(ss,"[1-%d]",nz);
	dlg.m_TimeRange=CString(ss);
	if(dlg.DoModal()==IDOK)  lineno=dlg.m_Time-1;
	if(nz>0)
	{
		delete xyz;
		xyz=new float[ny*nx];
		TimeSlice(InputFile,xyz,nx,ny,nz,lineno);
		nxx=nx;
		nyy=ny;
 		ReadytoDraw();
	}
	else return; 
}
 
void CShowsgyView::OnMenuitem32778() 
{
	// TODO: Add your command handler code here 
	display_config dlg;
	dlg.m_px =px;
	dlg.m_py =py;
	dlg.m_pz =pz;
	dlg.m_pImage=pImage;
 
	dlg.m_Token=token; 
	dlg.m_angle=imangel;
	dlg.m_MapNumber=map_number; 
	if(dlg.DoModal()==IDOK) 
	{
		token=dlg.m_Token;		
		px=dlg.m_px;
		py=dlg.m_py;
		pz=dlg.m_pz;
		pImage=dlg.m_pImage;
		imangel=dlg.m_angle;
		map_number=dlg.m_MapNumber; 
		ReadytoDraw();
	}
	else return; 
}

void CShowsgyView::OnInform() 
{
	// TODO: Add your command handler code here
	char s[200];
	current_infor dlg;
	dlg.m_InputFile=CString("输入文件:")+CString(InputFile);
	wsprintf(s,"Inline 线数:%d",nx);dlg.m_Inlines=CString(s);
	wsprintf(s,"Xline 线数:%d",ny);dlg.m_Xlines=CString(s);
	wsprintf(s,"每道点数:%d",nz);dlg.m_Nz=CString(s);
	switch (token)
	{
		case -1:dlg.m_mode=CString("显示方式:未定");break;
		case 0:dlg.m_mode=CString("显示方式:时间剖面");break;
		case 1:dlg.m_mode=CString("显示方式:灰度图");break;
		case 2:dlg.m_mode=CString("显示方式:彩色位图");break;
	}
	
	dlg.DoModal(); 
	
}

void CShowsgyView::OnLayer() 
{
	// TODO: Add your command handler code here
	CString xx;
	layer dlg;
	if(dlg.DoModal()==IDOK) xx=dlg.m_LayerFile;
	int i,j,k,*p;
	FILE *f;
	p=stime;
	if(strlen(xx)>5) 
	{
		f=fopen(xx,"r");
		while(!feof(f))
		{
			fscanf(f,"%d%d%d",&i,&j,&k);
			*p++=k;
		}
		fclose(f);
		delete xyz;
		xyz=new float[nx*ny];
		LayerSlice(InputFile,stime,xyz,nx,ny,nz);
		nxx=nx;
		nyy=ny;
		ReadytoDraw();
	}
	else return;  
}

void CShowsgyView::ReadytoDraw()
{
	if(xyz!=NULL) switch (token) 	
	{
		case -1:Invalidate(TRUE);break;
		case 0:
		delete mybitmap;
		mybitmap=new CWzdBitmap;
		mybitmap->px=px;
		mybitmap->py=py;
		mybitmap->pz=pz;			
		if(nxx>0&&nyy>0)
		mybitmap->CreateTimeSection(xyz,nxx,nyy); 
		Invalidate(TRUE);break;
	 
		  
		  case 1:
		  case 2:
			  delete mybitmap;
			  mybitmap=new CWzdBitmap;
			  mybitmap->token=token;
			  mybitmap->m_angel=imangel;
			  mybitmap->m_blankFile=BlankFile;
			  mybitmap->mapcolor=map_number; 
			  if(nxx>0&&nyy>0)
			  mybitmap->CreateColorSection(xyz, nxx, nyy);
			  Invalidate(TRUE);break;
	}
	
}

 

⌨️ 快捷键说明

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