📄 gprreadview.cpp
字号:
// GprReadView.cpp : implementation of the CGprReadView class
//
#include "stdafx.h"
#include "GprRead.h"
#include "GprReadDoc.h"
#include "GprReadView.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CGprReadView
IMPLEMENT_DYNCREATE(CGprReadView, CView)
BEGIN_MESSAGE_MAP(CGprReadView, CView)
//{{AFX_MSG_MAP(CGprReadView)
ON_COMMAND(ID_FILE_OPEN, OnFileOpen)
ON_COMMAND(ID_COLOR_DIALOG, OnColorDialog)
ON_COMMAND(ID_VIEW_COLORBIT, OnViewColorbit)
//}}AFX_MSG_MAP
// Standard printing commands
ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview)
ON_MESSAGE(WM_DOREALIZE, OnDoRealize)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CGprReadView construction/destruction
CGprReadView::CGprReadView()
{
// TODO: add construction code here
LPLOGPALETTE pLogPal;
pLogPal=(LPLOGPALETTE)malloc(sizeof(LOGPALETTE)+
sizeof(PALETTEENTRY)*64);
pLogPal->palVersion=0x300;
pLogPal->palNumEntries=64;
int i=0,j=0,k=0,cl=0;
int clr[4];
for(i=0;i<4;i++)
clr[i]=i*64;
for(i=0;i<4;i++)
for(j=0;j<4;j++)
for(k=0;k<4;k++)
{
pLogPal->palPalEntry[cl].peRed=clr[k];//-8*j-64*k); //初始化为红色
pLogPal->palPalEntry[cl].peGreen=clr[j];
pLogPal->palPalEntry[cl].peBlue=clr[i];
pLogPal->palPalEntry[cl].peFlags=0;
cl++;
}
if(!m_Palette.CreatePalette(pLogPal))
AfxMessageBox("Can't create palette!");
}
CGprReadView::~CGprReadView()
{
}
BOOL CGprReadView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
return CView::PreCreateWindow(cs);
}
/////////////////////////////////////////////////////////////////////////////
// CGprReadView drawing
void CGprReadView::OnDraw(CDC* pDC)
{
CGprReadDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
//pDC->SetMapMode(MM_LOENGLISH);
/* CPen m_mypen,*poldPen;
m_mypen.CreatePen(PS_DASH,8,RGB(255,0,0));
poldPen=pDC->SelectObject(&m_mypen);
pDC->MoveTo(200,100);
pDC->LineTo(200,600);
pDC->SelectObject(poldPen);
*/
CBrush brush,*pOldBrush;
int x,y,i;
pDC->SelectPalette(&m_Palette,FALSE);
pDC->RealizePalette();
pDC->SelectStockObject(BLACK_PEN);
for(i=0;i<64;i++)
{
x=(i%8)*16;
y=(i/8)*16;
brush.CreateSolidBrush(PALETTEINDEX(i)); //调色板索引引用
pOldBrush=pDC->SelectObject(&brush);
pDC->Rectangle(x,y,x+16,y+16);
pDC->SelectObject(pOldBrush);
brush.DeleteObject();
}
// CGprReadView::DrawDisplay();
// TODO: add draw code for native data here
}
/////////////////////////////////////////////////////////////////////////////
// CGprReadView printing
BOOL CGprReadView::OnPreparePrinting(CPrintInfo* pInfo)
{
// default preparation
return DoPreparePrinting(pInfo);
}
void CGprReadView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add extra initialization before printing
}
void CGprReadView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add cleanup after printing
}
/////////////////////////////////////////////////////////////////////////////
// CGprReadView diagnostics
#ifdef _DEBUG
void CGprReadView::AssertValid() const
{
CView::AssertValid();
}
void CGprReadView::Dump(CDumpContext& dc) const
{
CView::Dump(dc);
}
CGprReadDoc* CGprReadView::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CGprReadDoc)));
return (CGprReadDoc*)m_pDocument;
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CGprReadView message handlers
void CGprReadView::OnFileOpen()
{
// TODO: Add your command handler code here
CGprReadDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
CString FilePathname;
CString FileName;
CDC*pDC=GetDC();
CFile f1;
CFileDialog dlg( TRUE,_T("dzt"),_T("*.dzt"),
OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,
_T("文本文件 (*.dzt)|*.dzt|"));
if(IDOK==dlg.DoModal())
{ int i,j,n1;
unsigned char c1,c2;
FilePathname.Format("%s %s","filepath:",dlg.GetPathName());
FileName.Format("%s %s","Old file name:",dlg.GetFileName());
f1.Open(dlg.GetFileName(),CFile::modeRead);
// f1.Open("f:\\test5\\file2.dzt",CFile::modeRead);
f1.Read(&rh_tag,sizeof(short));
f1.Read(&rh_data,sizeof(short));
f1.Read(&rh_nsamp,sizeof(short));
f1.Read(&rh_bits,sizeof(short));
f1.Read(&rh_zero,sizeof(short));
f1.Read(&rh_sps,sizeof(float));
f1.Read(&rh_spm,sizeof(float));
f1.Read(&rh_mpm,sizeof(float));
f1.Read(&rh_position,sizeof(float));
f1.Read(&rh_range,sizeof(float));
f1.Read(&rh_spp,sizeof(short));
f1.Read(&rh_creat,sizeof(CGprReadView::SIR_rfdate));
f1.Read(&rh_modif,sizeof(CGprReadView::SIR_rfdate));
f1.Read(&rh_rgain,sizeof(short));
f1.Read(&rh_nrgain,sizeof(short));
f1.Read(&rh_text,sizeof(short));
f1.Read(&rh_ntext,sizeof(short));
f1.Read(&rh_proc,sizeof(short));
f1.Read(&rh_nproc,sizeof(short));
f1.Read(&rh_nchan,sizeof(short));
f1.Read(&rh_epsr,sizeof(float));
f1.Read(&rh_top,sizeof(float));
f1.Read(&rh_depth,sizeof(float));
f1.Read(&rh_npass,sizeof(short));
f1.Read(&reserved,sizeof(reserved));
f1.Read(&rh_chanmask,sizeof(short));
f1.Read(&rh_fname,sizeof(rh_fname));
f1.Read(&rh_chksum,sizeof(short));
f1.Read(&variable,sizeof(variable));
n1=(int)(rh_nchan);
// f1.Seek(1024,CFile::begin);
int pointnumber;
// pointnumber=f1.GetLength()-1024;
pointnumber=f1.GetLength()-2048;
f1.Seek(2048,CFile::begin);
if(rh_bits>10)
{rh_nchan=pointnumber/rh_nsamp/2;
for (i=0;i<rh_nchan;i++)
{
for(j=0;j<rh_nsamp;j++)
{f1.Read(&c1,1); ///读取一个数据的前8位
f1.Read(&c2,1); ////////读取一个数据的后8位
dataa[i][j]=(double)(c2)*256.0+(double)(c1); ///后8位为高位
dataa[i][j]=dataa[i][j]-32896.0;}
}
}
else
{ rh_nchan=pointnumber/rh_nsamp;
for (i=0;i<rh_nchan;i++)
{
for(j=0;j<rh_nsamp;j++)
{f1.Read(&c1,1); ///读取一个数据
dataa[i][j]=(double)(c1); ///
dataa[i][j]=dataa[i][j]-128.0;}
} } }
int i;
for (i=0;i<rh_nchan;i++) ///头上两个数做归零,以便以后数据处理
{dataa[i][0]=0.0;
dataa[i][1]=0.0;}
pDC->SetTextColor(RGB(255,0,0));
pDC->TextOut(0,0,FileName);
pDC->TextOut(0,20,FilePathname);
pDC->TextOut(0,40,"文件以被打开");
CGprReadView::GetMaxMindata();
CString strText;
strText.Format("The MaxData is %f,The MinData is %f,The ColorRange is %f ",MaxData,MinData,ColorRange);
AfxMessageBox(strText);
}
bool CGprReadView::DrawDisplay()
{
CGprReadDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
CDC*pDC=GetDC();
///文件名
pDC->TextOut(0,0,"文件名:");
pDC->TextOut(60,0,rh_fname);
int i,j,p1,s1,b1;
double t1,d1,df1;
p1=30;////纵向起点坐标////position 延时
t1=0.25; //调用对话框中的数值,纵坐标比例尺
d1=4; ///横坐标比例尺
df1=3; ///振幅比例
s1=0; ///每隔多少道显示
b1=1; //从多少道开始显示
///////////坐标轴的绘制////////////
///////画时间坐标
pDC->MoveTo (64,p1);
pDC->LineTo (64,(rh_nsamp)*t1+p1);
CString str1,str2;
str1="时间(ns)";
pDC->TextOut (15,(rh_nsamp*t1+p1)+10,str1);
int y_mark,y_number;
int m_step,m_p_step,m_step_mark;
y_mark=10;
y_number=10;
m_step=rh_range/y_number;
m_p_step=rh_nsamp/y_number;
m_step_mark=m_p_step/y_mark;
char buffer[20];
for (i=0;i<y_number;i++)
{ pDC->MoveTo (64,m_p_step*i*t1+p1);
pDC->LineTo (50,m_p_step*i*t1+p1);
_itoa(i*m_step,buffer,10);
str2=buffer;
pDC->TextOut (35,m_p_step*i*t1+p1-7,str2);
for (j=1;j<y_mark;j++)
{
pDC->MoveTo (64,m_p_step*i*t1+p1+m_step_mark*j*t1);
pDC->LineTo (58,m_p_step*i*t1+p1+m_step_mark*j*t1);
}
}
/////////////////////////////////
//////////横坐标的绘制
/* for (i=0;i<rh_nchan;i++)
{ _itoa(i,buffer,10);
str2=buffer;
pDC->TextOut (i*8*d1+94,p1-16,str2);
}
*/
/////////////////////////////////
// 画线条组成图形
/////////////////////////////////////
for(i=b1;i<rh_nchan;i++)
for(j=1;j<rh_nsamp;j++)
{
CPen m_mypen;
if(dataa[i][j]>MaxData)
iColorIndex=63;
else if(dataa[i][j]<MinData)
iColorIndex=63;
else
{
iColorIndex=(dataa[i][j]-MinData)/ColorRange;
}
//if(iColorIndex>63)
// iColorIndex=iColorIndex-63;
//iColorIndex=31-iColorIndex;
m_mypen.CreatePen(PS_DASH,1,PALETTEINDEX(iColorIndex));
CPen *pOldPen;
pOldPen=pDC->SelectObject(&m_mypen);
pDC->MoveTo(i,j);
pDC->LineTo(i,j+1);
pDC->SelectObject(pOldPen);
}
return 0;
}
double CGprReadView::GetMaxMindata()
{
MinData=MaxData=dataa[0][0];
for (int i=0;i<rh_nchan;i++)
for(int j=0;j<rh_nsamp;j++)
{
if( dataa[i][j]>MaxData) MaxData=dataa[i][j];
if( dataa[i][j]<MinData) MinData=dataa[i][j];
}
MaxData=8000;
MinData=-8000;
ColorRange=(MaxData-MinData)/64;
return 0;
}
LRESULT CGprReadView::OnDoRealize(WPARAM wParam, LPARAM)
{
CClientDC dc(this);
dc.SelectPalette(&m_Palette,FALSE);
if(dc.RealizePalette()) //若调色板映射被改变则刷新视图
GetDocument()->UpdateAllViews(NULL);
return 0L;
}
void CGprReadView::OnColorDialog()
{
// TODO: Add your command handler code here
CColorDialog ColorDialog;
if(ColorDialog.DoModal()==IDOK)
{
COLORREF Color=ColorDialog.GetColor();
CString strText;
strText.Format("The Selected color was RGB(%d,%d,%d)",GetRValue(Color),GetGValue(Color),GetBValue(Color));
AfxMessageBox(strText);
}
}
void CGprReadView::OnViewColorbit()
{
// TODO: Add your command handler code here
CGprReadView::DrawDisplay();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -