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

📄 cz_cl.cpp

📁 evc编程,使用数据库软件
💻 CPP
📖 第 1 页 / 共 3 页
字号:
// Cz_cl.cpp : implementation file
//
#include "stdafx.h"
#include "resource.h"
#include "Cz_cl.h"
#include "dzct.h"
#include <math.h>
#include <stdlib.h>
#include "Jbjs.h"
#include <string.h>

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

/////////////////////////////////////////////////////////////////////////////
// CCz_cl dialog


CCz_cl::CCz_cl(CWnd* pParent /*=NULL*/)
	: CDialog(CCz_cl::IDD, pParent)
{
	//{{AFX_DATA_INIT(CCz_cl)
	m_cdm = _T("");
	m_cdg = 0.0;
	m_spj = 0.0;
	m_czj = 0.0;
	m_distance = 0.0;
	m_dfm = 0.0;
	m_chs = 1;
	//}}AFX_DATA_INIT
	com.Ser_initialize();
	clsx_index=0;
	pre_chs=0;
	
}


void CCz_cl::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CCz_cl)
	DDX_Control(pDX, IDC_CDM, m_CDM);
	DDX_CBString(pDX, IDC_CDM, m_cdm);
	DDX_Text(pDX, IDC_CDG, m_cdg);
	DDX_Text(pDX, IDC_SPJ, m_spj);
	DDX_Text(pDX, IDC_CZJ, m_czj);
	DDX_Text(pDX, IDC_DISTANCE, m_distance);
	DDX_Text(pDX, IDC_dfm, m_dfm);
	DDX_Text(pDX, IDC_CD_CHS, m_chs);
	DDV_MinMaxUInt(pDX, m_chs, 1, 20);
	//}}AFX_DATA_MAP
	
}


BEGIN_MESSAGE_MAP(CCz_cl, CDialog)
	//{{AFX_MSG_MAP(CCz_cl)
	ON_BN_CLICKED(IDC_CD_CJ, OnCdCj)
	ON_BN_CLICKED(IDC_CD_CB, OnCdCb)
	ON_BN_CLICKED(IDC_STOP, OnStop)
	ON_BN_CLICKED(IDC_SAVE_ONE, OnSaveOne)
	ON_CBN_SELCHANGE(IDC_CDM, OnSelchangeCdm)
	ON_EN_CHANGE(IDC_CDG, OnChangeCdg)
	ON_EN_KILLFOCUS(IDC_CDG, OnKillfocus)
	ON_EN_SETFOCUS(IDC_CDG, OnSetfocus)
	ON_MESSAGE(WM_USERMESSAGE,OnUserMessage)
	ON_MESSAGE(WM_USERMESSAGE1,OnUserMessage1)
	ON_MESSAGE(WM_USERMESSAGE_DATA,OnUserMessage_data)
	ON_EN_KILLFOCUS(IDC_CD_CHS, OnKillfocus)
	ON_EN_SETFOCUS(IDC_CD_CHS, OnSetfocus)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CCz_cl message handlers

void CCz_cl::OnCdCj() //测角
{
	// TODO: Add your control notification handler code here
	UpdateData(true);
//	
	if(m_cdm.Compare(_T(""))==0)
	{
		AfxMessageBox(_T("请输入觇点名"));
		return;
	}

	GetDlgItem(IDC_CD_CJ)->EnableWindow(false);//测角

	GetDlgItem(IDC_CD_CB)->EnableWindow(false);//测角

	GetDlgItem(IDC_STOP)->EnableWindow(true);//测量结束

	GetDlgItem(IDC_SAVE_ONE)->EnableWindow(false);//存盘

	if(theApp.hPort==INVALID_HANDLE_VALUE)
	{
		AfxMessageBox(_T("串口不能用"));	
		return;
	}

	theApp.cj=0;
	theApp.mode=1;//测角
	DWORD aa;
	switch(theApp.yq.yqmc)
	{
	case 0:
		WriteFile(theApp.hPort,T_Z10,10*sizeof(BYTE),&aa,NULL);
		WriteFile(theApp.hPort,T_C,8*sizeof(BYTE),&aa,NULL);
		com.SerReadForAnser();
		break;
	case 1:
		break;
	}
}

BOOL CCz_cl::OnInitDialog() 
{
	CDialog::OnInitDialog();
	CString str;
	theApp.hWnd=GetSafeHwnd();//取得当前窗口句柄
    //初始化数据
	m_cdm.Format(_T("%s"),theApp.clsx.GetAt(clsx_index)->CDM);
	m_cdg=theApp.clsx.GetAt(clsx_index)->cbg;
	UpdateData(false);

	//初始化结束
	theApp.LR_cl=false;// 盘左
	if(theApp.spj_chs_kz>0)theApp.spjistrue=true;
	if(theApp.czj_chs_kz>0)theApp.czjistrue=true;
	if(theApp.dis_chs_kz>0)theApp.jlistrue=true;
	if(theApp.clsx.GetAt(0)->jl)
	{
		GetDlgItem(IDC_CD_CJ)->EnableWindow(false);//测角
		GetDlgItem(IDC_CD_CB)->EnableWindow(true);//测边
	}else
	{
		GetDlgItem(IDC_CD_CJ)->EnableWindow(true);//测角
		GetDlgItem(IDC_CD_CB)->EnableWindow(false);//测边
	}

	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}
LRESULT CCz_cl::OnUserMessage(WPARAM wParam, LPARAM lParam)
{
//	CString temp,str=theApp.Ser_buf;

	switch(theApp.yq.yqmc)
	{
	case 0:
		TOP_strspl();
		break;
	case 1:
		;
	}

	
	return 0;
}

LRESULT CCz_cl::OnUserMessage1(WPARAM wParam, LPARAM lParam)
{
	com.SerReadForAnser();
	return 0;
}

LRESULT CCz_cl::OnUserMessage_data(WPARAM wParam, LPARAM lParam)
{

//	com.SerReadForAnser();
	DWORD aa;
//	if(cj<4)
	{
		WriteFile(theApp.hPort,T_Z34,10*sizeof(BYTE),&aa,NULL);
		WriteFile(theApp.hPort,T_C,8*sizeof(BYTE),&aa,NULL);
		com.SerReadForAnser();
//		cj++;
	}
	return 0;
}
void CCz_cl::OnCdCb() 
{
	// TODO: Add your control notification handler code here
	UpdateData(true);
	if(m_cdm.Compare(_T(""))==0)
	{
		AfxMessageBox(_T("请输入觇点名"));
		return;
	}
	GetDlgItem(IDC_CD_CJ)->EnableWindow(false);//测角
	GetDlgItem(IDC_CD_CB)->EnableWindow(false);//测角

	GetDlgItem(IDC_STOP)->EnableWindow(true);//测量结束
	GetDlgItem(IDCANCEL)->EnableWindow(false);//测量结束
	GetDlgItem(IDC_SAVE_ONE)->EnableWindow(false);//存盘
	if(theApp.hPort==INVALID_HANDLE_VALUE)
	{
		AfxMessageBox(_T("串口不能用"));	
		return;
	}
	theApp.mode=2;
	theApp.cj=3;
	jl=0;
	DWORD aa;
	switch(theApp.yq.yqmc)
	{
	case 0:
		WriteFile(theApp.hPort,T_Z34,10*sizeof(BYTE),&aa,NULL);
		WriteFile(theApp.hPort,T_C,8*sizeof(BYTE),&aa,NULL);
		com.SerReadForAnser();
		break;
	case 1:
		break;
	}

	
	

	
}

void CCz_cl::OnStop() 
{
	// TODO: Add your control notification handler code here
	GetDlgItem(IDC_CD_CJ)->EnableWindow(true);//测角
	GetDlgItem(IDC_CD_CB)->EnableWindow(true);//测边

	GetDlgItem(IDC_STOP)->EnableWindow(false);//测量结束
	GetDlgItem(IDC_SAVE_ONE)->EnableWindow(true);//存盘
	GetDlgItem(IDCANCEL)->EnableWindow(true);



	DWORD lpExitCode;
	
	if(theApp.hReadThread)
	{
		GetExitCodeThread(theApp.hReadThread,&lpExitCode);
	
		TerminateThread(theApp.hReadThread,lpExitCode );

	}
	CloseHandle(theApp.hReadThread);
}

void CCz_cl::OnSaveOne() 
{
	bool c,i,gl;
	UpdateData(true);
	if(m_cdg<=0&&m_cdg!=-10.0)
	{
		if(MessageBox(_T("觇标高为零或负数"),_T("觇标高"),MB_OKCANCEL)!=IDOK)
		{
			GetDlgItem(IDC_CDG)->SetFocus();
			return;
		}
	}
	set_cbg(clsx_index);//设置觇标高

	CString str;
	
	
	GetDlgItem(IDC_SAVE_ONE)->EnableWindow(false);
	SaveData(true);//存单次数据

	if(theApp.clsx.GetAt(clsx_index)->chjsbz<0)//-1一测回结束
	{
		//一测回结束 检查归零差 成功测量下一测回 测回内的I 2c较差
		if(js_glc(m_chs)>theApp.p_c)
		{
			clsx_index-=getfxsum(theApp.clsx.GetAt(clsx_index)->chs);
			AfxMessageBox(_T("一测回结束,归零差超限"));
		}
		c=compare_spj_2c();
		i=compare_I();
		if(!c||!i)
		{
			str.Format(_T("clsx_inde=%d:jianqu=%d"),clsx_index,getfxsum(theApp.clsx.GetAt(clsx_index)->chs));
			AfxMessageBox(str);
			clsx_index-=getfxsum(theApp.clsx.GetAt(clsx_index)->chs);
		}
		if(!c)
		{
			AfxMessageBox(_T("一测回结束,2c超限"));
		}
		if(!i)
		{
			AfxMessageBox(_T("一测回结束,I超限"));
		}
		
	}
	else if(theApp.clsx.GetAt(clsx_index)->chjsbz==1)//全站角度结束
	{
		//全站结束 检查 a  f 成功迁站
		
		c=compare_spj_2c();
		i=compare_I();
	
		if(js_glc(m_chs)>theApp.p_c)
		{
			gl=false;
		
			AfxMessageBox(_T("归零差超限"));
		}
		else
			gl=true;
		if(gl&&i&&c)
		{
			if(theApp.clsx.GetSize()==clsx_index+1)
			{
				GetDlgItem(IDOK)->EnableWindow(true);//可以迁站
				return;
			}
			//比较垂直角,方向角互差
			c=compare_f();
			i=compare_a();
			if(c&&i)
			{
				GetDlgItem(IDOK)->EnableWindow(true);//可以迁站
				return;
			}else 
			{
				if(!c)
				{
			//水平角互差超限
					theApp.spjistrue=true;
					AfxMessageBox(_T("水平角方向值互差超限"));
					clsx_index=-1;
				}
				if(!i)
				{
				//垂直角互差超限
					theApp.czjistrue=true;
					AfxMessageBox(_T("垂直角互差超限"));
					clsx_index=-1;
				}

			}
			
		}
		else
		{
			clsx_index-=getfxsum(theApp.clsx.GetAt(clsx_index)->chs);
		}
	
	}
	else if(theApp.clsx.GetAt(clsx_index)->chjsbz==10)
	{
		GetDlgItem(IDOK)->EnableWindow(true);//可以迁站
		return;
	}

	clsx_index++;
	if(clsx_index>=theApp.clsx.GetSize())
		return;

	str.Format(_T("%s"),theApp.clsx.GetAt(clsx_index)->L_R);
	if(str.Compare(_T("盘左"))==0)
	{
		if(theApp.clsx.GetAt(clsx_index)->jl)
		{
			GetDlgItem(IDC_CD_CJ)->EnableWindow(false);//测角
			GetDlgItem(IDC_CD_CB)->EnableWindow(true);//theApp.LR_cl
		}else
		{
			GetDlgItem(IDC_CD_CJ)->EnableWindow(true);//测角
			GetDlgItem(IDC_CD_CB)->EnableWindow(false);//theApp.LR_cl
		}
	}else
	{
		GetDlgItem(IDC_CD_CJ)->EnableWindow(true);//测角
		GetDlgItem(IDC_CD_CB)->EnableWindow(false);//theApp.LR_cl
	}

	m_chs=theApp.clsx.GetAt(clsx_index)->chs;
	m_cdm.Format(_T("%s"),theApp.clsx.GetAt(clsx_index)->CDM);
	m_cdg=search_cbg(clsx_index);
	GetDlgItem(IDC_STA)->SetWindowText(theApp.clsx.GetAt(clsx_index)->L_R);
	UpdateData(false);
}

void CCz_cl::SaveData(bool LR)//数据存入数据库
{
	/////////////////存盘
	CString str;
	str.Format(_T("%s"),theApp.clsx.GetAt(clsx_index)->L_R);
	
	if(str.Compare(_T("盘左"))==0)
	{
		save_pz();
	}
	else
	{
		save_py();
	}
}

int CCz_cl::search_czj_record(CString table,int chs, TCHAR *cdm)//搜索
{
	if(!theApp.DataBase.OpenTable(theApp.DataBase.szFileName,table))
	{
		AfxMessageBox(_T("不能打开数据库"));
		return -1;
	}
	int sum=theApp.DataBase.GetRecordNumber();//取得记录数
	CString str,str1,str2;
	
	for(int i=0;i<sum;i++)
	{
		theApp.DataBase.ReadRecord(i);
		str2.Format(_T("%d"),chs);
		str.Format(_T("%s"),theApp.DataBase.m_values.GetAt(2));
		str1.Format(_T("%s"),theApp.DataBase.m_values.GetAt(0));

		if((str.Compare(cdm)==0) && (str1.Compare(str2)==0))
		{
			theApp.DataBase.CloseTable();
			return i;
		}
	}

	theApp.DataBase.CloseTable();
	return -1;
}




double CCz_cl::js_glc(int chs)//计算归零差
{
	double glc1=0,glc2=0,f1,f2,f01,f02;
	CString str;
	TCHAR CDM[20];
	int i,j;
	CJbjs mobj;
	if(theApp.fxs>4)
	{
		if(!theApp.DataBase.OpenTable(theApp.DataBase.szFileName,_T("DXSPJ")))
		{
			AfxMessageBox(_T("不能打开DXSPJ数据库"));
			return 1000;
		}
		theApp.DataBase.ReadRecord(0);
		wcscpy(CDM,theApp.DataBase.m_values.GetAt(2));
		theApp.DataBase.CloseTable();
		i =	search_czj_record(_T("DXSPJ"),theApp.clsx.GetAt(clsx_index)->chs,CDM);
		j =	search_czj_record(_T("DXSPJ"),theApp.clsx.GetAt(clsx_index)->chs,_T("归零向"));

		if(i!=-1)
		{
			if(!theApp.DataBase.OpenTable(theApp.DataBase.szFileName,_T("DXSPJ")))
			{
				AfxMessageBox(_T("不能打开DXSPJ数据库"));
				return 1000;
			}
			theApp.DataBase.ReadRecord(i);
			f1=m_wtof(theApp.DataBase.m_values.GetAt(4));
			f2=m_wtof(theApp.DataBase.m_values.GetAt(5));
			theApp.DataBase.ReadRecord(j);
			f01=m_wtof(theApp.DataBase.m_values.GetAt(4));
			f02=m_wtof(theApp.DataBase.m_values.GetAt(5));
			glc1=mobj.js_glc(f01,f1);
			glc2=mobj.js_glc(f02,f2);
			theApp.DataBase.CloseTable();
		}
	}
	glc1= glc1>glc2 ? glc1:glc2;
	if(glc1>theApp.p_c)
		AfxMessageBox(_T("归零差超限"));
	return glc1;
}

void CCz_cl::OnSelchangeCdm() //搜索觇标高
{
	// TODO: Add your control notification handler code here
	UpdateData(true);
	int sel=m_CDM.GetCurSel();
	m_cdm.ReleaseBuffer();
	int len=m_CDM.GetLBTextLen( sel );
	m_CDM.GetLBText(sel,m_cdm.GetBuffer(len));

	int index=theApp.fxmc.GetSize();
	for(int i=0;i<index;i++)
	{
		if(wcscmp(theApp.fxmc.GetAt(i)->cdm,m_cdm)==0)
		{
			m_cdg=theApp.fxmc.GetAt(i)->cbg;
			UpdateData(false);
			return;
		}
	}
}

void CCz_cl::OnOK() //全站观测结束,存盘退出
{
	// TODO: Add extra validation here
	clean();
	GetDlgItem(IDOK)->EnableWindow(false);
	GetDlgItem(IDCANCEL)->EnableWindow(false);
	GetDlgItem(IDC_CD_CJ)->EnableWindow(false);
	GetDlgItem(IDC_CD_CB)->EnableWindow(false);

⌨️ 快捷键说明

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