📄 cgedoc.cpp
字号:
// 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 + -