📄 caltuhaolat.cpp
字号:
// Caltuhaolat.cpp : implementation file
//
#include "stdafx.h"
#include "CalSurBase.h"
#include "Caltuhaolat.h"
#include "Survey.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CCaltuhaolat dialog
CCaltuhaolat::CCaltuhaolat(CWnd* pParent /*=NULL*/)
: CDialog(CCaltuhaolat::IDD, pParent)
{
//{{AFX_DATA_INIT(CCaltuhaolat)
m_geo = -1;
m_thmap = -1;
m_zbx = -1;
//}}AFX_DATA_INIT
}
void CCaltuhaolat::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CCaltuhaolat)
DDX_Control(pDX, IDC_COMBO_MERI, m_meri);
DDX_Control(pDX, IDC_COMBO_BLC, m_blc);
DDX_Control(pDX, IDC_MSFLEXGRID_DATA, m_griddata);
DDX_Control(pDX, IDC_MSFLEXGRID_TH, m_gridth);
DDX_Radio(pDX, IDC_RADIO_GEOA, m_geo);
DDX_Radio(pDX, IDC_RADIO_OLD, m_thmap);
DDX_Radio(pDX, IDC_RADIO_ZBX54, m_zbx);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CCaltuhaolat, CDialog)
//{{AFX_MSG_MAP(CCaltuhaolat)
ON_BN_CLICKED(ID_CLEARDATA, OnCleardata)
ON_BN_CLICKED(ID_SAVEDATA, OnSavedata)
ON_BN_CLICKED(IDC_RADIO_GEOA, OnRadioGeoa)
ON_BN_CLICKED(IDC_RADIO_GEOB, OnRadioGeob)
ON_BN_CLICKED(IDC_RADIO_OLD, OnRadioOld)
ON_BN_CLICKED(IDC_RADIO_NEW, OnRadioNew)
ON_BN_CLICKED(IDC_RADIO_ZBX54, OnRadioZbx54)
ON_BN_CLICKED(IDC_RADIO_ZBX80, OnRadioZbx80)
ON_BN_CLICKED(ID_INPUTDATA, OnInputdata)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CCaltuhaolat message handlers
BOOL CCaltuhaolat::OnInitDialog()
{
CDialog::OnInitDialog();
m_geo=0;
m_zbx=0;
m_thmap=0;
CString StrTxt;
m_griddata.SetCol(0);
m_griddata.SetRow(0);
StrTxt = "< 点号 >|< 坐标X >|< 坐标Y >";
m_griddata.SetFormatString(StrTxt);
m_griddata.Refresh();
m_gridth.SetCol(0);
m_gridth.SetRow(0);
StrTxt = "< 点号 >|< 图 号 >";
m_gridth.SetFormatString(StrTxt);
m_gridth.Refresh();
m_blc.AddString("100万"); // 0
m_blc.AddString("50万"); // 1
m_blc.AddString("25万"); // 2
m_blc.AddString("10万"); // 3
m_blc.AddString("5万"); // 4
m_blc.AddString("2.5万"); // 5
m_blc.AddString("1万"); // 6
m_blc.AddString("5千"); // 7
m_blc.SetCurSel(4);
CString stradd;
for(int i = 1;i<= 60;i++)
{
stradd.Format("%i",3*i);
m_meri.AddString(stradd);
}
m_meri.SetCurSel(42);
//m_cmdok.EnableWindow(false);
UpdateData(false);
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void CCaltuhaolat::OnCleardata()
{
m_griddata.Clear();
m_gridth.Clear();
CString StrTxt;
m_griddata.SetCol(0);
m_griddata.SetRow(0);
if(m_geo==0)
{
StrTxt = "< 点号 >|< 坐标X >|< 坐标Y >";
}
else
{
StrTxt = "< 点号 >|< 经 度 >|< 纬 度 >";
}
m_griddata.SetFormatString(StrTxt);
m_griddata.Refresh();
m_gridth.SetCol(0);
m_gridth.SetRow(0);
StrTxt = "< 点号 >|< 图 号 >";
m_gridth.SetFormatString(StrTxt);
m_gridth.Refresh();
}
void CCaltuhaolat::OnOK()
{
CString stroldtf;
CString strnewtf;
CString strtext;
CSurvey survey;
double dwj,dlj;double dgdw,dgdj;
UpdateData(true);
int sel = m_blc.GetCurSel();
for(long j=1;j<m_griddata.GetRows();j++)
{
m_griddata.SetRow(j);
m_griddata.SetCol(1);
dgdw=atof(m_griddata.GetText());
m_griddata.SetCol(2);
dgdj=atof(m_griddata.GetText());
if(m_geo==0)
{ //将大地坐标转换地理坐标
survey.GetSysDat(m_zbx+1);
survey.dsetx=dgdw;
survey.dsety=dgdj;
if(survey.dsety>1000000)
{
survey.GetFdh(); //根据带号计算中央子午线
survey.dudai=3;
survey.dsety=survey.dsety -survey.fdh*1000000;
}
else
{
m_meri.GetLBText(m_meri.GetCurSel(),strtext);
survey.dmerl=atoi(strtext);
survey.fdh=survey.dmerl/3;
survey.dudai =3;
}
survey.XyToBl();
dgdw=survey.dgetbl_l;
dgdj=survey.dgetbl_b;
}
dwj=survey.Deg(dgdw);
dlj=survey.Deg(dgdj);
if(dwj==0||dlj==0)
break;
if(sel>=1&&sel<=2)
{
stroldtf=survey.GetThCalLat(dwj,dlj,sel);
}
else if(sel>=4&&sel<=5)
{
stroldtf=survey.GetThCalLatEF(dwj,dlj,sel);
}
else
{
stroldtf=survey.GetThCalLatADGH(dwj,dlj,sel);
}
stroldtf.MakeUpper();
strnewtf=survey.GetNewtfFormOldtf(stroldtf);
m_gridth.SetRow(j);
m_gridth.SetCol(0);
m_griddata.SetCol(0);
m_gridth.SetText(m_griddata.GetText());
m_gridth.SetCol(1);
if(m_thmap==0)
{ m_gridth.SetText(stroldtf);}
else
{ m_gridth.SetText(strnewtf);}
}
//CDialog::OnOK();
}
void CCaltuhaolat::OnSavedata()
{
UpdateData(true);
CString strport;
CString strgd;
CString strfilename;
CStdioFile n_File;
CFileDialog gldOpenFile(true,"*.*",NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,"文本文件(*.txt)|*.txt|所有文件(*.*)|*.*|",NULL);
gldOpenFile.DoModal();
strfilename=gldOpenFile.GetPathName();
//-------------------------------------------
CFileException e;
if(!n_File.Open(strfilename,CFile::modeCreate | CFile::modeWrite,&e))
{
return;
}
for(long k=1;k<m_griddata.GetRows();k++)
{
m_griddata.SetRow(k);
m_griddata.SetCol(0);
strport.Format("%10s",m_griddata.GetText());
if(m_griddata.GetText().IsEmpty()) {break;}
strgd=strport;
for(long j=1;j<m_griddata.GetCols();j++)
{
m_griddata.SetCol(j);
strport.Format("%15s",m_griddata.GetText());
strgd=strgd+strport;
}
m_gridth.SetRow(k);
m_gridth.SetCol(1);
strport.Format("%18s",m_gridth.GetText());
strgd=strgd+strport;
strgd+="\n";
n_File.WriteString(strgd);
//break;
}
n_File.Close();
ShellExecute(::GetDesktopWindow(), _T("open"), strfilename, NULL, NULL, SW_NORMAL);
}
void CCaltuhaolat::OnRadioGeoa()
{
CString StrTxt;
m_griddata.SetCol(0);
m_griddata.SetRow(0);
StrTxt = "< 点号 >|< 坐标X >|< 坐标Y >";
m_griddata.SetFormatString(StrTxt);
m_griddata.Refresh();
}
void CCaltuhaolat::OnRadioGeob()
{
CString StrTxt;
m_griddata.SetCol(0);
m_griddata.SetRow(0);
StrTxt = "< 点号 >|< 经 度 >|< 纬 度 >";
m_griddata.SetFormatString(StrTxt);
m_griddata.Refresh();
}
void CCaltuhaolat::OnRadioOld()
{
OnOK();
}
void CCaltuhaolat::OnRadioNew()
{
OnOK();
}
void CCaltuhaolat::OnRadioZbx54()
{
OnOK();
}
void CCaltuhaolat::OnRadioZbx80()
{
OnOK();
}
BEGIN_EVENTSINK_MAP(CCaltuhaolat, CDialog)
//{{AFX_EVENTSINK_MAP(CCaltuhaolat)
ON_EVENT(CCaltuhaolat, IDC_MSFLEXGRID_DATA, -603 /* KeyPress */, OnKeyPressMsflexgridData, VTS_PI2)
//}}AFX_EVENTSINK_MAP
END_EVENTSINK_MAP()
void CCaltuhaolat::OnKeyPressMsflexgridData(short FAR* KeyAscii)
{
CString getdata;CString strport;
getdata=m_griddata.GetText();
getdata.TrimLeft();
getdata.TrimRight();
if(*KeyAscii==8)
{
strport=getdata.Left(getdata.GetLength()-1);
m_griddata.SetText(strport);
}
else if(*KeyAscii==32)
{
long scol=0;
scol=m_griddata.GetCol();
if(scol>=2)
{
m_griddata.SetRow(m_griddata.GetRow()+1);
m_griddata.SetCol(0);
}
else
{
m_griddata.SetCol(scol+1);
}
}
else
{
strport.Format("%c",*KeyAscii);
getdata=getdata+strport;
m_griddata.SetText(getdata);
}
}
void CCaltuhaolat::OnInputdata()
{
CString strfilename;
CStdioFile n_File;
CFileDialog gldOpenFile(true,"*.*",NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,"文本文件(*.txt)|*.txt|所有文件(*.*)|*.*|",NULL);
gldOpenFile.DoModal();
strfilename=gldOpenFile.GetPathName();
//-------------------------------------------
CFileException e;
if(!n_File.Open(strfilename,CFile::modeRead,&e))
{ return; }
CString cstrLine;
CString strgd;
n_File.ReadString(cstrLine);
strgd=cstrLine.Left(4);
strgd.TrimLeft();strgd.TrimRight();
int setj=0;
int colnum=0;
if(strgd=="@XY")
{
while(n_File.ReadString(cstrLine)!=false)
{
cstrLine.TrimLeft(); cstrLine.TrimRight();
if(cstrLine.IsEmpty()) { continue; }
colnum=colnum+1;
if(colnum>=m_griddata.GetRows())
{
m_griddata.SetRows(colnum+100);
m_gridth.SetRows(colnum+100);
//AfxMessageBox("错误!文件长度超过100行");
//return;
}
setj=cstrLine.Find(' ');
strgd=cstrLine.Left(setj);
strgd.TrimLeft();strgd.TrimRight();
m_griddata.SetRow(colnum);
m_griddata.SetCol(0);
m_griddata.SetText(strgd);
strgd=cstrLine.Right(cstrLine.GetLength()-setj);
strgd.TrimLeft();strgd.TrimRight();
cstrLine=strgd;
setj=cstrLine.Find(' ');
strgd=cstrLine.Left(setj);
strgd.TrimLeft();strgd.TrimRight();
m_griddata.SetCol(1);
m_griddata.SetText(strgd);
strgd=cstrLine.Right(cstrLine.GetLength()-setj);
strgd.TrimLeft();strgd.TrimRight();
m_griddata.SetCol(2);
m_griddata.SetText(strgd);
}
}
else
{
AfxMessageBox("文件错误!");
return;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -