📄 dlgcoordtrans.cpp
字号:
pSubMenu = pMenu->GetSubMenu(3);
pSubMenu->ModifyMenu(0,MF_STRING|MF_BYPOSITION,pSubMenu->GetMenuItemID(0),GetResString(IDS_ABOUT));
DrawMenuBar();
//从菜单调用
if(flag == 0){
FILE* fp;
CString path = theLang.GetDirectory(EXECUTABLEDIR,TRUE);
path += "coord.ini";
fopen_s(&fp,path,"w");
fprintf(fp,"LanguageID=%d\n",theLang.GetLanguageID());
fclose(fp);
}
}
// CEllipSoid 对话框
IMPLEMENT_DYNAMIC(CEllipSoid, CDialog)
BEGIN_MESSAGE_MAP(CEllipSoid, CDialog)
ON_CBN_SELCHANGE(IDC_CMB_ELLIPNAME, &CEllipSoid::OnCbnSelchangeEllip)
ON_BN_CLICKED(IDADD, &CEllipSoid::OnBnClickedAdd)
ON_BN_CLICKED(IDDELETE, &CEllipSoid::OnBnClickedDelete)
ON_BN_CLICKED(IDMODIFY, &CEllipSoid::OnBnClickedModify)
END_MESSAGE_MAP()
CEllipSoid::CEllipSoid(CWnd* pParent /*=NULL*/)
: CDialog(CEllipSoid::IDD, pParent)
, m_semimajor(0)
, m_invflattening(0)
{
_num_ref = 0;
m_ellipname = "";
m_coordname = "";
}
CEllipSoid::~CEllipSoid()
{
_num_ref=0;
}
void CEllipSoid::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Text(pDX, IDC_EDT_COORDNAME,m_coordname);
DDX_Text(pDX, IDC_EDT_ELLIPSOIDNAME,m_ellipname);
DDX_Text(pDX, IDC_EDT_SEMIMAJOR,m_semimajor);
DDX_Text(pDX, IDC_EDT_INVFLATTENING,m_invflattening);
}
BOOL CEllipSoid::OnInitDialog()
{
CDialog::OnInitDialog();
for (u1 i=0;i<_refellip.size();i++){
((CComboBox*)GetDlgItem(IDC_CMB_ELLIPNAME))->AddString(_refellip.at(i).name_coor);
}
((CComboBox*)GetDlgItem(IDC_CMB_ELLIPNAME))->SetCurSel(2);
theLang.SetLanguage();
OnCbnSelchangeEllip();
Localize();
return TRUE;
}
void CEllipSoid::Localize()
{
SetWindowText(GetResString(IDS_ELLIPPARA));
GetDlgItem(IDC_COORDNAME)->SetWindowText(GetResString(IDS_COORDNAME));
GetDlgItem(IDC_ELLIPNAME)->SetWindowText(GetResString(IDS_ELLIPSOIDNAME));
GetDlgItem(IDC_PARA)->SetWindowText(GetResString(IDS_PROPARA));
GetDlgItem(IDC_NAME)->SetWindowText(GetResString(IDS_NAME));
GetDlgItem(IDC_SEMIMAJOR)->SetWindowText(GetResString(IDS_SEMIMAJOR));
GetDlgItem(IDC_FLATTENING)->SetWindowText(GetResString(IDS_FLATTENING));
GetDlgItem(IDADD)->SetWindowText(GetResString(IDS_ADD));
GetDlgItem(IDMODIFY)->SetWindowText(GetResString(IDS_MODIFY));
GetDlgItem(IDDEFAULT)->SetWindowText(GetResString(IDS_DEFAULT));
GetDlgItem(IDDELETE)->SetWindowText(GetResString(IDS_DELETE));
if (theLang.GetLanguageID() == (WORD)LANGID_ZH_CN)
{
CStatic* pwnd=((CStatic*)GetDlgItem(IDC_FLATTENING));
CRect myRect,myRect2;
pwnd->GetWindowRect(&myRect);
this->GetWindowRect(&myRect2);
u1 newx=myRect.left-myRect2.left;
u1 newy=myRect.top-myRect2.top-(myRect.bottom-myRect.top);
pwnd->MoveWindow(newx,newy+5, myRect.Width(),myRect.Height());
}
}
void CEllipSoid::OnCbnSelchangeEllip()
{
CString strname;
u1 i=((CComboBox*)GetDlgItem(IDC_CMB_ELLIPNAME))->GetCurSel();
m_coordname = _refellip.at(i).name_coor;
m_ellipname = _refellip.at(i).name_ellip;
m_semimajor = _refellip.at(i).semimajor;
m_invflattening=_refellip.at(i).invflattening;
UpdateData(FALSE);
}
void CEllipSoid::OnBnClickedAdd()
{
CString cstr;
FILE* fp;
_refellipsoid ellip;
cstr=theLang.GetDirectory(EXECUTABLEDIR)+ "Ellipse.csv";
UpdateData(TRUE);
if(fopen_s(&fp,cstr,"a+") == 0){//str in format:"str,str,double,double,str,\n"
fprintf_s(fp,"%s,%s,%lf,%lf,Self define Ellipsoid,\n",m_coordname,
m_ellipname,m_semimajor,m_invflattening);
fclose(fp);
strcpy_s(ellip.name_coor,m_coordname);
strcpy_s(ellip.name_ellip,m_ellipname);
ellip.semimajor = m_semimajor;
ellip.invflattening = m_invflattening;
_refellip.push_back(ellip);
}
((CComboBox*)GetDlgItem(IDC_CMB_ELLIPNAME))->AddString(m_coordname);
((CComboBox*)GetDlgItem(IDC_CMB_ELLIPNAME))->SetCurSel(_refellip.size()-1);
OnCbnSelchangeEllip();
_bwsmodify = TRUE;
}
void CEllipSoid::OnBnClickedDelete()
{
CString cstr;
FILE* fp,*fptmp;
char all[200]; memset(all,0,200);
char chstr[256];
u1 i=((CComboBox*)GetDlgItem(IDC_CMB_ELLIPNAME))->GetCurSel();
_refellip.erase(_refellip.begin()+i);
sprintf_s(all,"%s,%s,%lf,%lf,Self define Ellipsoid,\n",m_coordname,
m_ellipname,m_semimajor,m_invflattening);
cstr=theLang.GetDirectory(EXECUTABLEDIR)+ "Ellipse.csv";
if(fopen_s(&fptmp,cstr+".tmp","w")!=0)
return;
if(fopen_s(&fp,cstr,"a+") != 0)
return;
//str in format:"str,str,double,double,str,\n"
while(ReadLine(fp,chstr) != -1){
if(strcmp(all,chstr)!=0)
fprintf_s(fptmp,"%s",chstr);
}
fclose(fp);
fclose(fptmp);
::DeleteFile(cstr);
::MoveFile(cstr+".tmp",cstr);
((CComboBox*)GetDlgItem(IDC_CMB_ELLIPNAME))->DeleteString(i);
((CComboBox*)GetDlgItem(IDC_CMB_ELLIPNAME))->SetCurSel(i-1);
OnCbnSelchangeEllip();
_bwsmodify = TRUE;
}
void CEllipSoid::OnBnClickedModify()
{
CString cstr;
_refellipsoid ref;
FILE* fp,*fptmp;
char all[256]; memset(all,0,256);
char chstr[256];
UpdateData(TRUE);
strcpy_s(ref.name_coor,m_coordname);
strcpy_s(ref.name_ellip,m_ellipname);
ref.semimajor = m_semimajor;
ref.invflattening = m_invflattening;
u1 i=((CComboBox*)GetDlgItem(IDC_CMB_ELLIPNAME))->GetCurSel();
sprintf_s(all,"%s,%s,%lf,%lf,\n",_refellip.at(i).name_coor,
_refellip.at(i).name_ellip,_refellip.at(i).semimajor,_refellip.at(i).invflattening);
_refellip.erase(_refellip.begin()+i);
_refellip.insert(_refellip.begin()+i,ref);
cstr=theLang.GetDirectory(EXECUTABLEDIR)+ "Ellipse.csv";
if(fopen_s(&fptmp,cstr+".tmp","w")!=0) return;
if(fopen_s(&fp,cstr,"a+") != 0) return;
//str in format:"str,str,double,double,str,\n"
while(ReadLine(fp,chstr) != -1){
if(strstr(chstr,all)==NULL)//not find
fprintf_s(fptmp,"%s",chstr);
else//find
fprintf_s(fptmp,"%s",all);
}
fclose(fp);
fclose(fptmp);
::DeleteFile(cstr);
::MoveFile(cstr+".tmp",cstr);
// ((CComboBox*)GetDlgItem(IDC_CMB_ELLIPNAME))->SetCurSel(i);
OnCbnSelchangeEllip();
_bwsmodify = TRUE;
}
// CDatumTranPara 对话框
IMPLEMENT_DYNAMIC(CDatumTranPara, CDialog)
CDatumTranPara::CDatumTranPara(CWnd* pParent /*=NULL*/)
: CDialog(CDatumTranPara::IDD, pParent)
, m_modelID(0)
{
m_factor=0;
m_Tx=m_Ty=m_Tz=m_Wx=m_Wy=m_Wz=0;
m_SrcBLUnit = m_DestBLUnit = 2;
m_src1=m_src2=m_src3=0;
m_dest1=m_dest2=m_dest3=0;
m_num = 0;
m_tranName="";
}
CDatumTranPara::~CDatumTranPara()
{
}
void CDatumTranPara::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_LIST_DATA, m_list_Data);
DDX_Control(pDX, IDC_SRC_UNIT, m_cmbSrcUnit);
DDX_Control(pDX, IDC_DEST_UNIT, m_cmbDestUnit);
DDX_Control(pDX, IDC_CMB_TRANMODEL, m_cmbModelID);
DDX_Control(pDX, IDC_EDIT_SRC1, m_edtsrc1);
DDX_Control(pDX, IDC_EDIT_SRC2, m_edtsrc2);
DDX_Control(pDX, IDC_EDIT_SRC3, m_edtsrc3);
DDX_Control(pDX, IDC_EDIT_DEST1, m_edtdest1);
DDX_Control(pDX, IDC_EDIT_DEST2, m_edtdest2);
DDX_Control(pDX, IDC_EDIT_DEST3, m_edtdest3);
DDX_Text(pDX, IDC_EDIT_FACTOR,m_factor);
DDX_Text(pDX, IDC_EDT_X,m_Tx);
DDX_Text(pDX, IDC_EDT_Y,m_Ty);
DDX_Text(pDX, IDC_EDT_Z,m_Tz);
DDX_Text(pDX, IDC_EDT_X2,m_Wx);
DDX_Text(pDX, IDC_EDT_Y2,m_Wy);
DDX_Text(pDX, IDC_EDT_Z2,m_Wz);
DDX_Text(pDX, IDC_DATUMTRANNAME,m_tranName);
}
BEGIN_MESSAGE_MAP(CDatumTranPara, CDialog)
ON_BN_CLICKED(IDC_RAD_ASSIGN, &CDatumTranPara::OnBnClickedRadAssign)
ON_CBN_SELCHANGE(IDC_CMB_TRANMODEL, &CDatumTranPara::OnCbnSelchangeCmbDatumtran)
ON_BN_CLICKED(IDC_RAD_CALCULATE, &CDatumTranPara::OnBnClickedRadCalculate)
ON_BN_CLICKED(IDC_RAD_SRC_CAR, &CDatumTranPara::OnBnClickedRadSrcCar)
ON_BN_CLICKED(IDC_RAD_SRC_GEO, &CDatumTranPara::OnBnClickedRadSrcGeo)
ON_CBN_SELCHANGE(IDC_SRC_UNIT, &CDatumTranPara::OnCbnSelchangeSrcUnit)
ON_CBN_SELCHANGE(IDC_DEST_UNIT, &CDatumTranPara::OnCbnSelchangeDestUnit)
ON_BN_CLICKED(ID_ADD, &CDatumTranPara::OnBnClickedAdd)
ON_BN_CLICKED(ID_DELETE, &CDatumTranPara::OnBnClickedDelete)
// ON_NOTIFY(LVN_ITEMCHANGED, IDC_LIST_DATA, &CDatumTranPara::OnLvnItemchangedListData)
// ON_NOTIFY(NM_CLICK, IDC_LIST_DATA, &CDatumTranPara::OnNMClickListData)
// ON_WM_LBUTTONDOWN(IDC_LIST_DATA,WM_LBUTTONDOWN,&CDatumTranPara::OnLButtonDown)
ON_BN_CLICKED(ID_CALCULATE, &CDatumTranPara::OnBnClickedCalculate)
ON_CBN_SELCHANGE(IDC_SRC_ELLIP, &CDatumTranPara::OnCbnSelchangeSrcEllip)
ON_CBN_SELCHANGE(IDC_DEST_ELLIP, &CDatumTranPara::OnCbnSelchangeDestEllip)
ON_BN_CLICKED(IDOK, &CDatumTranPara::OnBnClickedOk)
END_MESSAGE_MAP()
// CDatumTranPara 消息处理程序
BOOL CDatumTranPara::OnInitDialog()
{
CDialog::OnInitDialog();
m_cmbModelID.AddString("Bursa-Wolf");
m_cmbModelID.AddString("Molodensky");
m_edtsrc1.SetWindowText("1"); m_edtsrc2.SetWindowText("2"); m_edtsrc3.SetWindowText("3");
m_edtdest1.SetWindowText("4"); m_edtdest2.SetWindowText("5"); m_edtdest3.SetWindowText("6");
((CButton*)GetDlgItem(IDC_RAD_SRC_CAR))->SetCheck(1);
((CButton*)GetDlgItem(IDC_RAD_DEST_CAR))->SetCheck(1);
((CButton*)GetDlgItem(IDC_RAD_ASSIGN))->SetCheck(1);
((CComboBox*)GetDlgItem(IDC_CMB_TRANMODEL))->SetCurSel(0);
OnBnClickedRadAssign();
//listctrl
m_list_Data.SetExtendedStyle( LVS_EX_UNDERLINEHOT |LVS_EX_TWOCLICKACTIVATE );
m_list_Data.InsertColumn(0,"Num",LVCFMT_LEFT,30);
m_list_Data.InsertColumn(1,"srcX",LVCFMT_LEFT,70);
m_list_Data.InsertColumn(2,"srcY",LVCFMT_LEFT,70);
m_list_Data.InsertColumn(3,"srcZ",LVCFMT_LEFT,70);
m_list_Data.InsertColumn(4,"destX",LVCFMT_LEFT,70);
m_list_Data.InsertColumn(5,"destY",LVCFMT_LEFT,70);
m_list_Data.InsertColumn(6,"destZ",LVCFMT_LEFT,70);
m_list_Data.InsertColumn(7,"RMS",LVCFMT_LEFT,40);
CString strValidChars;//
m_list_Data.SetReadOnlyColumns(0);//read only
// strValidChars = "";
// m_list_Data.SetColumnValidEditCtrlCharacters(strValidChars,1);//none control edit
strValidChars = "0123456789.";
m_list_Data.SetColumnValidEditCtrlCharacters(strValidChars,-1);//digital only edit
// m_list_Data.SetComboColumns(3,TRUE);
m_list_Data.EnableVScroll();
m_list_Data.SetExtendedStyle(LVS_EX_GRIDLINES|LVS_EX_FULLROWSELECT);
//for source geodetic coordinates unit
m_cmbSrcUnit.AddString("dd:mm:ss");
m_cmbSrcUnit.AddString("dd°mm′ss″");
m_cmbSrcUnit.AddString("DEG");
m_cmbSrcUnit.AddString("RADIAN");
m_cmbSrcUnit.AddString("SECOND");
m_cmbSrcUnit.SetCurSel((int)m_SrcBLUnit);
//for destination geodetic coordinates unit;
m_cmbDestUnit.AddString("dd:mm:ss");
m_cmbDestUnit.AddString("dd°mm′ss″");
m_cmbDestUnit.AddString("DEG");
m_cmbDestUnit.AddString("RADIAN");
m_cmbDestUnit.AddString("SECOND");
m_cmbDestUnit.SetCurSel((int)m_SrcBLUnit);
//add ellipsoid from _refellip vector
for (u1 i=0;i<_refellip.size();i++){
((CComboBox*)GetDlgItem(IDC_SRC_ELLIP))->AddString(_refellip.at(i).name_coor);
((CComboBox*)GetDlgItem(IDC_DEST_ELLIP))->AddString(_refellip.at(i).name_coor);
}
//datum transformation model;
//ellipsoid CCombox state.
if (_datumtran.model != 0)
{
m_cmbModelID.SetCurSel(_datumtran.model-1);
((CComboBox*)GetDlgItem(IDC_SRC_ELLIP))->SetCurSel(_datumtran.srcellip);
((CComboBox*)GetDlgItem(IDC_DEST_ELLIP))->SetCurSel(_datumtran.destellip);
}
else{
m_cmbModelID.SetCurSel(0);
((CComboBox*)GetDlgItem(IDC_SRC_ELLIP))->SetCurSel(2);
((CComboBox*)GetDlgItem(IDC_DEST_ELLIP))->SetCurSel(2);
}
//name the parameters.
CString tmp;
CComboBox* pCombox;
pCombox = ((CComboBox*)GetDlgItem(IDC_SRC_ELLIP));
pCombox->GetLBText(pCombox->GetCurSel(),tmp);
m_tranName=tmp + "_";
pCombox = ((CComboBox*)GetDlgItem(IDC_DEST_ELLIP));
pCombox->GetLBText(pCombox->GetCurSel(),tmp);
m_tranName += tmp;
m_cmbModelID.GetWindowText(tmp);
m_tranName = m_tranName +"_"+ tmp;
Localize();
return TRUE;
}
void CDatumTranPara::OnBnClickedRadAssign()
{
// TODO: 在此添加控件通知处理程序代码
((CEdit*)GetDlgItem(IDC_EDIT_SRC1))->EnableWindow(FALSE);
((CEdit*)GetDlgItem(IDC_EDIT_SRC2))->EnableWindow(FALSE);
((CEdit*)GetDlgItem(IDC_EDIT_SRC3))->EnableWindow(FALSE);
((CEdit*)GetDlgItem(IDC_EDIT_DEST1))->EnableWindow(FALSE);
((CEdit*)GetDlgItem(IDC_EDIT_DEST2))->EnableWindow(FALSE);
((CEdit*)GetDlgItem(IDC_EDIT_DEST3))->EnableWindow(FALSE);
((CButton*)GetDlgItem(IDC_RAD_SRC_CAR))->EnableWindow(FALSE);
((CButton*)GetDlgItem(IDC_RAD_SRC_GEO))->EnableWindow(FALSE);
((CButton*)GetDlgItem(IDC_RAD_DEST_CAR))->EnableWindow(FALSE);
((CButton*)GetDlgItem(IDC_RAD_DEST_GEO))->EnableWindow(FALSE);
((CButton*)GetDlgItem(ID_ADD))->EnableWindow(FALSE);
((CButton*)GetDlgItem(ID_DELETE))->EnableWindow(FALSE);
((CButton*)GetDlgItem(ID_IMPORT))->EnableWindow(FALSE);
((CButton*)GetDlgItem(ID_CALCULATE))->EnableWindow(FALSE);
m_list_Data.EnableWindow(FALSE);
m_cmbSrcUnit.EnableWindow(FALSE);
m_cmbDestUnit.EnableWindow(FALSE);
}
void CDatumTranPara::OnCbnSelchangeCmbDatumtran()
{
m_modelID=((CComboBox*)GetDlgItem(IDC_CMB_TRANMODEL))->GetCurSel();
//name the parameters.
CString tmp;
u1 i=0;
CComboBox* pcmb;
pcmb = ((CComboBox*)GetDlgItem(IDC_SRC_ELLIP));
pcmb->GetLBText(pcmb->GetCurSel(),tmp);
m_tranName=tmp + "_";
pcmb = ((CComboBox*)GetDlgItem(IDC_DEST_ELLIP));
pcmb->GetLBText(pcmb->GetCurSel(),tmp);
m_tranName += tmp;
m_cmbModelID.GetLBText(m_cmbModelID.GetCurSel(),tmp);
m_tranName = m_tranName +"_"+tmp;
UpdateData(FALSE);
}
void CDatumTranPara::OnBnClickedRadCalculate()
{
((CEdit*)GetDlgItem(IDC_EDIT_SRC1))->EnableWindow(TRUE);
((CEdit*)GetDlgItem(IDC_EDIT_SRC2))->EnableWindow(TRUE);
((CEdit*)GetDlgItem(IDC_EDIT_SRC3))->EnableWindow(TRUE);
((CEdit*)GetDlgItem(IDC_EDIT_DEST1))->EnableWindow(TRUE);
((CEdit*)GetDlgItem(IDC_EDIT_DEST2))->EnableWindow(TRUE);
((CEdit*)GetDlgItem(IDC_EDIT_DEST3))->EnableWindow(TRUE);
((CButton*)GetDlgItem(IDC_RAD_SRC_CAR))->EnableWindow(TRUE);
((CButton*)GetDlgItem(IDC_RAD_SRC_GEO))->EnableWindow(TRUE);
((CButton*)GetDlgItem(IDC_RAD_DEST_CAR))->EnableWindow(TRUE);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -