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

📄 cgedoc.cpp

📁 《面向对象程序设计实用教程》一书的源码
💻 CPP
📖 第 1 页 / 共 5 页
字号:
// cgeDoc.cpp : implementation of the CCgeDoc class


#include "stdafx.h"
#include "cge.h"
#include "softkeydlg.h"
#include "cgeDoc.h"
#include "Setpar.h"
#include "math.h"
#include "MyLine.h"
#include "ProgDlg.h"
#include "cgeView.h"
#include "WrSeg2.h"
#include "NewFile.h"
#include  <conio.h>
#include "jiaozhunDLG.h"
#include "diejiaDLG.h"
#include "Mdlg.h"
#include "Passw.h"
#include "Sysdialog.h"
#include "View1.h"
#include "View2.h"
#include "mdsetpar.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE

static char THIS_FILE[] = __FILE__;
#endif

//extern "C" int APIENTRY WrData(int x, int y );

/////////////////////////////////////////////////////////////////////////////
// CCgeDoc

IMPLEMENT_DYNCREATE(CCgeDoc, CDocument)

BEGIN_MESSAGE_MAP(CCgeDoc, CDocument)
	//{{AFX_MSG_MAP(CCgeDoc)
	ON_COMMAND(ID_canshu5, Oncanshu5)
	ON_COMMAND(ID_caiyang1, Oncaiyang1)
	ON_COMMAND(ID_FILE_OPEN, OnFileOpen)
	ON_CBN_CLOSEUP(IDC_DLGBARCOMBO1, OnCloseupDlgbarcombo1)
	ON_COMMAND(ID_WRCOM, OnWrcom)
	ON_COMMAND(ID_mcaiyang, Onmcaiyang)
	ON_COMMAND(ID_YIQIZIJIAO, OnYiqizijiao)
	ON_COMMAND(ID_caiyang2, OnMcaiyang)
	ON_COMMAND(ID_MSIN, OnMsin)
	ON_COMMAND(ID_FANGDA, OnFangda)
	ON_COMMAND(ID_SUOXIAO, OnSuoxiao)
	ON_COMMAND(ID_SHUIPINGFANGDA, OnShuipingfangda)
	ON_COMMAND(ID_SHUIPINGSUOXIAO, OnShuipingsuoxiao)
	ON_COMMAND(ID_QUESHENG, OnQuesheng)
	ON_COMMAND(ID_DOCMANPING, OnDocmanping)
	ON_UPDATE_COMMAND_UI(ID_SUOXIAO, OnUpdateSuoxiao)
	ON_UPDATE_COMMAND_UI(ID_SHUIPINGSUOXIAO, OnUpdateShuipingsuoxiao)
	ON_UPDATE_COMMAND_UI(ID_FANGDA, OnUpdateFangda)
	ON_COMMAND(ID_CAIYANG_DANJIA, OnCaiyangDanjia)
	ON_COMMAND(ID_GONJV_shujvfanzhan, OnGONJVshujvfanzhan)
	ON_COMMAND(ID_FILE_SAVE, OnFileSave)
	ON_COMMAND(ID_FILL_UP, OnFillUp)
	ON_COMMAND(ID_FILL_DOWN, OnFillDown)
	ON_UPDATE_COMMAND_UI(ID_FILL_UP, OnUpdateFillUp)
	ON_UPDATE_COMMAND_UI(ID_FILL_DOWN, OnUpdateFillDown)
	ON_UPDATE_COMMAND_UI(ID_SHUIPINGFANGDA, OnUpdateShuipingfangda)
	ON_COMMAND(ID_CHAKAN_PASS, OnChakanPass)
	ON_UPDATE_COMMAND_UI(ID_FILE_MRU_FILE1, OnUpdateFileMruFile1)
	ON_COMMAND(ID_YMANPING, OnYmanping)
	ON_COMMAND(ID_MHELP, OnMhelp)
	ON_COMMAND(ID_MDCAHNSHU, OnMdcahnshu)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CCgeDoc construction/destruction
//int CCgeDoc::m_Ndb = 0;
//int CCgeDoc::m_H = 0;

CCgeDoc::CCgeDoc()
{	
	blank=true;
	unbas=true;
	fullScreen=false;
	view2=NULL;
    canshuKey = false;
	caiyangKey = false;
	drawlineKey = false;
	recaiyangKey = true;
    olddataKey = true;
	//olddataKey = false;
	m_FangdaKey = false;	
	m_SuoxiaoKey = false;
	moniKey = false;
	Mcaiyang = false;
	m_manpingKey = false;
	m_HFangdaKey = false;
	m_HSuoxiaoKey = false;	
	FillKey=false;
	InterCeptKey=false;
	mdKey = false;

	Num_Pointes = 2048;
    Num_Line = 24;
	m_jiange = 200;	
	m_dtf = 0.2;
	
	HPos = 0;
	VPos = 0;
	basline = 40;//100;
	s_stepX = 1;
	m_stepX = s_stepX;
	//m_stepY = m_stepY0; //1000/0x7fffffff //纵向比例//m412
	//old_m_stepY = m_stepY0; //旧单放值
	
	//初始步长
	//m_stepY0 = 4.6566E-6;
	m_stepY0 = 3.0*basline/(32768*512.0);
	
	m_stepY = m_stepY0; //1000/0x7fffffff //纵向比例//m12
	//old_m_stepY = m_stepY0; //旧单放值//m12	
	old_m_stepY = 256 * m_stepY0; //54dB	

	FangsKey = false;
	m_viewX0 = 0;//5;
	m_viewY0 = 80;
	m_viewY00 = basline;

	m_HAddX = 80; //水平右边距
	Num_FScishu = 1;
	m_TimelabelStep = 50;    
	Num_TimelabelStep = (int(Num_Pointes / m_TimelabelStep) + 1) * m_TimelabelStep;	
	m_NdbKey = true;
	m_Hkey = true;
	m_Ndb = 0;
	m_H = 0;
	m_Mcishu = 0;
	m_maxydB = 60;
	m_minydB = -60;//12;
	m_maxxdB = 3;//1;
	m_minxdB = -5;//0;
	
	m_nCurChannel = 0;
	m_xyAxisSize.cx = 1200;//m412
	//参考CObject类和CObList集合类
	systemp=CTime::GetCurrentTime().Format("%d/%b/%Y%H:%M");
  	m_wrdate=systemp.Mid(0,11);
	m_wrtime=systemp.Mid(11,6);
	

	//初始化参数设置
	s[0]="1-24";
	s[1]="500";
	s[2]="35";
	s[3]="关";
	s[4]="200 us";
	s[5]="2048";
	s[6]="0";
	s[7]="内";
	s[8]="24CH";
	//初始化叠加次数
	//m_Mcishu = 5;
	m_pa[5] = "00_1"; 	//线
	m_pa[1] = "10.00";//检波
	m_pa[4] = "2.0";//偏移
	m_pa[3] = "2.00";//炮
	m_pa[2] = "2.0";//源	

	Fangs = "1-24";

	//初始化地脉动参数

	mds[0]="1-6";
	mds[1]="15.6";
	mds[2]="0.1";
	mds[3]="关";
	mds[4]="10 ms";
	mds[5]="4096";
	mds[6]="0";
	mds[7]="内";
	mds[8]="6CH";
	mds[9]="24";
	mds[10]="30";
	mds[11] = "c:\\md";
	//获得应用程序所在的路径
	CTime tNow = CTime::GetCurrentTime();  
	mds[12] = "md"+tNow.Format("%m%d")+"_1";
	mds[13] = "30";
	//获得最近的参数
	char cr[20];	
	CFile Sg2_r;//("my228.txt",CFile::CFile::modeRead);
	BOOL bl =  Sg2_r.Open("my228.txt",CFile::modeRead );
	if(bl)
	{	
		for(int i=0;i<11;i++)
		{
			Sg2_r.Read(cr, 20);
			s[i] = _T(cr);
		}
		
		//m723
		if(s[4].Right(2) == "us")
		{
			m_dtf = atof(s[4])/1000.0;
		}
	
		if(s[4].Right(2) == "ms")
		{
			m_dtf = atof(s[4]);
		}
		
		//m723

		for(i=0;i<10;i++)
		{
			Sg2_r.Read(cr, 20);
			m_pa[i] = _T(cr);
		}		
		Sg2_r.Close();
		recentpath = true;
	}
	else
	{
		recentpath = false;
		//AfxMessageBox("没有最近的参数建议使用缺省参数");
	}


	//读取系统参数
			//m_com = 2; //m_com = com2;
			m_com = 1;
			m_lpt = 0x0378 ;//= 888D;

			char r_s[20];
			//CFile Sg2_r;
			bl =  Sg2_r.Open("my2001.txt",CFile::modeRead );
			if(bl)
			{
				Sg2_r.Read(r_s,20);
				m_com = atoi(r_s);
				Sg2_r.Read(r_s,20);
				m_lpt = atoi(r_s);
				Sg2_r.Read(r_s,20);
				m_minxdB = atoi(r_s);
				Sg2_r.Read(r_s,20);
				m_maxxdB = atoi(r_s);
				Sg2_r.Read(r_s,20);
				m_minydB = atoi(r_s);
				Sg2_r.Read(r_s,20);
				m_maxydB = atoi(r_s);								
				Sg2_r.Close();

			}

	Fangs = s[0];


}

CCgeDoc::~CCgeDoc()
{
	/*
	CFile SetPar_wr("SetPar.dat",CFile::modeCreate|CFile::modeWrite);
	for(int i=0;i<9;i++)
		SetPar_wr.Write(s[i],20);
	SetPar_wr.Close();
	*/
   
   if(!m_CMyLineList.IsEmpty())
   {	
		//m_CMyLineList.RemoveAll();// CAge's aren't destroyed.	
		//ASSERT(m_CMyLineList.IsEmpty()); // Yes it is.			
		CMyLine *pMyLine;
		POSITION ps;
		ps = m_CMyLineList.GetHeadPosition();
		while ( ps != NULL )
		{			
			pMyLine = (CMyLine *)m_CMyLineList.GetNext(ps);
			delete pMyLine; // Now delete the CAge objects.
		}
		m_CMyLineList.RemoveHead();
		m_CMyLineList.RemoveAll();// CAge's aren't destroyed.	
		
		ASSERT(m_CMyLineList.IsEmpty()); // Yes it is.			

   }
}

BOOL CCgeDoc::OnNewDocument()
{
	if (!CDocument::OnNewDocument())
		return FALSE;
	/*
	注:该函数的调用有如下情况(可以在此初始化部分视窗类的数据)
	1. 用户启动应用程序时
	2. 选择 File 菜单中的 New 选项时
	*/
	m_Fill = 0;
	m_FirstBase = 75;
	m_ViewLeft = 0;
	CString lastname;
	lastname = GetPathName();
	//运行其他应用程序 if(WinExec("Calc.exe",SW_SHOW)<=31) AfxMessageBox("error");
	return TRUE;
}



/////////////////////////////////////////////////////////////////////////////
// CCgeDoc serialization

void CCgeDoc::Serialize(CArchive& ar)
{
	int i;
	if (ar.IsStoring())
	{
		for(i=0;i<11;i++)
		{
			ar<<s[i]; 
		}
	//m12
		for(i=0;i<10;i++)
		{
			ar<<m_pa[i]; 			
		}
	//m12
        ar<<Num_Line;
		ar<<Num_Pointes;
		ar<<m_No;
		ar<<m_maxY;
		ar<<m_averY;
		//ar<<basline;
	}
	else
	{
		// TODO: add loading code here
		for(i=0;i<11;i++)
		{
			ar>>s[i]; 
		}
	//m12
		for(i=0;i<10;i++)
		{
			ar>>m_pa[i]; 			
		}
	//m12
		ar>>Num_Line;
		ar>>Num_Pointes;
		ar>>m_No;
		ar>>m_maxY;
		ar>>m_averY;
		//ar>>basline;
	if(recentpath)
	{
		POSITION Position;
		Position = GetFirstViewPosition();
		CView* pVView = GetNextView(Position);
		CCgeView *pView;
		while(pVView!=NULL)
		{
			if(pVView->IsKindOf(RUNTIME_CLASS(CCgeView)))
				{ break;};
			pVView = GetNextView(Position);
		}
			pView = (CCgeView *)pVView;	
		//m12
		for(int i=0;i<10;i++ )
		{
			pView->m_path[i] = m_pa[i]; 
		}
		//m12
	}

		Relist();
		m_iniapage();
		Fangs = s[0];
	}
	
	m_CMyLineList.Serialize(ar);//!!注意调用的是列表类的串行化方法    
	//因为在CObList类中内嵌套了IMPLEMENT_SERIAL宏
    	
}

/////////////////////////////////////////////////////////////////////////////
// CCgeDoc diagnostics

#ifdef _DEBUG
void CCgeDoc::AssertValid() const
{
	CDocument::AssertValid();
}

void CCgeDoc::Dump(CDumpContext& dc) const
{
	CDocument::Dump(dc);
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
void CCgeDoc::Oncanshu5() 
{	

	POSITION Position;
	Position = GetFirstViewPosition();
	CView* pVView = GetNextView(Position);
	CCgeView *pView;
	while(pVView!=NULL)
		{
			if(pVView->IsKindOf(RUNTIME_CLASS(CCgeView)))
				{ break;};
			pVView = GetNextView(Position);
		}
	pView = (CCgeView *)pVView;	
	if(IsModified())//提示数据将要修改,是否保存
	{
		//OnFileSave();
		pView->m_Viewparfile();
		SetModifiedFlag( false );

	}

	m_NdbKey = true;
	m_Hkey = true;
	m_Ndb = 0;
	m_H = 0;
	m_Mcishu = 0;

	monicaiyang = false; //实际采样时为假	
	if(moniKey)
	{
		monicaiyang = true; //模拟采样时为真	
	}
		
	Setpar par;
	int OKOrCANCEL;
	BYTE c_temp[14];
	for(int i=0;i<9;i++)
	{ 
		par.s[i] = s[i];//数据从Document类到Setpar对话框
	}
    //par.s[4] = m_jiange;
	par.setpar_s8 = Num_Line;	
	
	par.m_butoon1Key = false;
	if(moniKey)
	{
		par.m_butoon1Key = true;
		moniKey = false;
	}
	
	ret_par = false;
	OKOrCANCEL = par.DoModal();
	if (OKOrCANCEL == IDCANCEL)
	{   
		ret_par = true;
		return;
	}
	else
	{
		for(i=0;i<9;i++)
		{
			s[i] = par.s[i];//数据从Setpar对话框到Document类
		}
	 
	Num_Line = par.setpar_s8;
	Num_Pointes = atoi(par.s[5]);// 在char* 的地方可以直接使用CString的对象
	m_No = par.s[0];
	m_N0 = par.s[0].Find ("-");
	m_N0 = atoi(par.s[0].Left (m_N0));
	//m_jiange = atoi(par.s[4]);
	//m_jiange = atof(par.s[4])
	if(s[4].Right(2) == "us")
	{
		m_jiange = atof(par.s[4])/1000.0;
	}
	//m723
	if(s[4].Right(2) == "ms")
	{
		m_jiange = atof(par.s[4]);
	}
	m_dtf = m_jiange;

	Fangs = s[0];
	
    CDialogBar* pDLGBAR = (CDialogBar* )AfxGetApp()->m_pMainWnd->GetDescendantWindow(CG_ID_VIEW_MYDIALOGBAR);
	//pDLGBAR->GetDlgItem(IDC_DLGBARUSORMS)->SetWindowText("  "+s[4].Right(2));
	pDLGBAR->GetDlgItem(IDC_DLGBARUSORMS)->SetWindowText("  ms");
	
	canshuKey = false; //参数设置完成以后,允许采样
	caiyangKey = true;	
    
  
	//保存最近的参数
	CFile Sg2_w("my228.txt",CFile::modeCreate | CFile::modeWrite);
	for( i=0;i<11;i++)
	{
		Sg2_w.Write(s[i],20);
	}
	for(i=0;i<10;i++)
	{
		//Sg2_w.Write(m_path[i],20);
		Sg2_w.Write(pView->m_path[i],20);
	}

	Sg2_w.Close();

  if(!monicaiyang)
  {
	//获得数据通信规约的码串1_10    c_temp(0_9)  	
	
	c_temp[0]=xianbo[par.xianbo_index ];      //码串2
	c_temp[1]=dijie[par.dijie_index ];        //码串3  ??
	c_temp[2]=gaojie[par.gaojie_index ];      //码串4
	c_temp[3] = 0xB0; //zengy_index = 0x00;   //码串7 增益倍数
    //case 
	//码串1  
	switch  (par.channel_index) 
	{
		case 0:    {c_temp[4]=Channel_2[par.tongdao_index];	  
					c_temp[5]=jiange_2[par.jiange_index];	      
					c_temp[6]=tongdao_number[par.channel_index];
					break;}
		case 1:    {c_temp[4]=Channel_6[par.tongdao_index];	  
					c_temp[5]=jiange_6[par.jiange_index];	  
					c_temp[6]=tongdao_number[par.channel_index];
										break;}
		case 2:    {c_temp[4]=Channel_12[par.tongdao_index];	  
					c_temp[5]=jiange_12[par.jiange_index];	     		
					c_temp[6]=tongdao_number[par.channel_index];
					break;}
		case 3:    {c_temp[4]=Channel_24;	  
				    c_temp[5]=jiange_24[par.jiange_index];	     

⌨️ 快捷键说明

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