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