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

📄 dlgcoordtrans.cpp

📁 GPS坐标转换软件与源程序 支持世界上大多数坐标框架下
💻 CPP
📖 第 1 页 / 共 5 页
字号:
	((CButton*)GetDlgItem(IDC_RAD_DEST_GEO))->EnableWindow(TRUE);
	((CButton*)GetDlgItem(ID_ADD))->EnableWindow(TRUE);
	((CButton*)GetDlgItem(ID_DELETE))->EnableWindow(TRUE);
	((CButton*)GetDlgItem(ID_IMPORT))->EnableWindow(TRUE);
	((CButton*)GetDlgItem(ID_CALCULATE))->EnableWindow(TRUE);
	m_list_Data.EnableWindow(TRUE);
	m_cmbSrcUnit.EnableWindow(TRUE);
	m_cmbDestUnit.EnableWindow(TRUE);
}

void CDatumTranPara::RetrieveDataFromCtrl(const char flag/* =0 */)
{
	CString tmp;
	int dd,mm;float ss;
	if(flag & 0x1){//src
		if (1 == m_SrcCoordType) {
			switch(m_SrcBLUnit) {
			case 0://dd:mm:ss
				m_edtsrc1.GetWindowText(tmp);
				sscanf(tmp,"%d:%d:%f″",&dd,&mm,&ss);
				//			sscanf(tmp,"%d:%m:%f",&dd,&mm,&ss)
				m_src1=(dd+1.0*mm/60+ss/3600)*PI/180;
				m_edtsrc2.GetWindowText(tmp);
				sscanf(tmp,"%d:%d:%f″",&dd,&mm,&ss);
				//			sscanf(tmp,"%d:%m:%f",&dd,&mm,&ss)
				m_src2=(dd+1.0*mm/60+ss/3600)*PI/180;
				break;
			case 1://dd°mm′ss″
				m_edtsrc1.GetWindowText(tmp);
				sscanf(tmp,"%d°%d′%f″",&dd,&mm,&ss);
				//			sscanf(tmp,"%d:%m:%f",&dd,&mm,&ss)
				m_src1=(dd+1.0*mm/60+ss/3600)*PI/180;
				m_edtsrc2.GetWindowText(tmp);
				sscanf(tmp,"%d°%d′%f″",&dd,&mm,&ss);
				//			sscanf(tmp,"%d:%m:%f",&dd,&mm,&ss)
				m_src2=(dd+1.0*mm/60+ss/3600)*PI/180;
				break;
			case 2://degree
				m_edtsrc1.GetWindowText(tmp); m_src1=atof(tmp);m_src1 = m_src1*PI/180;
				m_edtsrc2.GetWindowText(tmp); m_src2=atof(tmp);m_src2 = m_src2*PI/180;
				break;
			case 3://radian
				m_edtsrc1.GetWindowText(tmp); m_src1=atof(tmp);
				m_edtsrc2.GetWindowText(tmp); m_src2=atof(tmp);
				break;
			default://second
				m_edtsrc1.GetWindowText(tmp); m_src1=atof(tmp);m_src1=m_src1/3600*PI/180;
				m_edtsrc2.GetWindowText(tmp); m_src2=atof(tmp);m_src2=m_src2/3600*PI/180;
			}		
		}
		else{
			m_edtsrc1.GetWindowText(tmp); m_src1=atof(tmp);
			m_edtsrc2.GetWindowText(tmp); m_src2=atof(tmp);
		}
		m_edtsrc3.GetWindowText(tmp); m_src3=atof(tmp);
	}
	if(flag & 0x2){//dest
		if (1 == m_DestCoordType) {
			switch(m_DestBLUnit) {
			case 0://dd:mm:ss
				m_edtdest1.GetWindowText(tmp);
				sscanf(tmp,"%d:%d:%f″",&dd,&mm,&ss);
				//			sscanf(tmp,"%d:%m:%f",&dd,&mm,&ss)
				m_dest1=(dd+1.0*mm/60+ss/3600)*PI/180;
				m_edtdest2.GetWindowText(tmp);
				sscanf(tmp,"%d:%d:%f″",&dd,&mm,&ss);
				//			sscanf(tmp,"%d:%m:%f",&dd,&mm,&ss)
				m_dest2=(dd+1.0*mm/60+ss/3600)*PI/180;
				break;
			case 1://dd°mm′ss″
				m_edtdest1.GetWindowText(tmp);
				sscanf(tmp,"%d°%d′%f″",&dd,&mm,&ss);
				//			sscanf(tmp,"%d:%m:%f",&dd,&mm,&ss)
				m_dest1=(dd+1.0*mm/60+ss/3600)*PI/180;
				m_edtdest2.GetWindowText(tmp);
				sscanf(tmp,"%d°%d′%f″",&dd,&mm,&ss);
				//			sscanf(tmp,"%d:%m:%f",&dd,&mm,&ss)
				m_dest2=(dd+1.0*mm/60+ss/3600)*PI/180;
				break;
			case 2://degree
				m_edtdest1.GetWindowText(tmp); m_dest1=atof(tmp);m_dest1 = m_dest1*PI/180;
				m_edtdest2.GetWindowText(tmp); m_dest2=atof(tmp);m_dest2 = m_dest2*PI/180;
				break;
			case 3://radian
				m_edtdest1.GetWindowText(tmp); m_dest1=atof(tmp);
				m_edtdest2.GetWindowText(tmp); m_dest2=atof(tmp);
				break;
			default://second
				m_edtdest1.GetWindowText(tmp); m_dest1=atof(tmp);m_dest1=m_dest1/3600*PI/180;
				m_edtdest2.GetWindowText(tmp); m_dest2=atof(tmp);m_dest2=m_dest2/3600*PI/180;
			}		
		}
		else{
			m_edtdest1.GetWindowText(tmp); m_dest1=atof(tmp);
			m_edtdest2.GetWindowText(tmp); m_dest2=atof(tmp);
		}
		m_edtdest3.GetWindowText(tmp); m_dest3=atof(tmp);
	}


}

void CDatumTranPara::InitializeDataToCtrl(const char flag/* =3 */)
{
	CString tmp;
	int dd,mm;float ss;
	if(flag & 0x1){//src
		if (1 == m_SrcCoordType) {//initialize the value of Cedit control
			switch(m_SrcBLUnit) {
			case 0://dd:mm:ss
				m_src1=m_src1*180/PI;	
				dd=(int)m_src1;		mm=(int)((m_src1-dd)*60);
				ss=((m_src1-dd)*60-mm)*60;
				tmp.Format("%d:%d:%f",dd,mm,ss);m_edtsrc1.SetWindowText(tmp);

				m_src2=m_src2*180/PI;
				dd=(int)m_src2;		mm=(int)((m_src2-dd)*60);
				ss=((m_src2-dd)*60-mm)*60;
				tmp.Format("%d:%d:%f",dd,mm,ss);m_edtsrc2.SetWindowText(tmp);
				break;
			case 1://dd°mm′ss″
				m_src1=m_src1*180/PI;	
				dd=(int)m_src1;		mm=(int)((m_src1-dd)*60);
				ss=((m_src1-dd)*60-mm)*60;
				tmp.Format("%d°%d′%f″",dd,mm,ss);m_edtsrc1.SetWindowText(tmp);

				m_src2=m_src2*180.0/PI;
				dd=(int)m_src2;		mm=(int)((m_src2-dd)*60);
				ss=((m_src2-dd)*60-mm)*60;
				tmp.Format("%d°%d′%f″",dd,mm,ss);m_edtsrc2.SetWindowText(tmp);
				break;
			case 2://degree
				m_src1=m_src1*180.0/PI;tmp.Format("%f",m_src1);m_edtsrc1.SetWindowText(tmp); 
				m_src2=m_src2*180.0/PI;
				tmp.Format("%f",m_src2);m_edtsrc2.SetWindowText(tmp);
				break;
			case 3://radian
				tmp.Format("%f",m_src1);m_edtsrc1.SetWindowText(tmp); 
				tmp.Format("%f",m_src2);m_edtsrc2.SetWindowText(tmp);
				break;
			default://second
				m_src1=m_src1*180.0/PI*3600;tmp.Format("%f",m_src1);m_edtsrc1.SetWindowText(tmp); 
				m_src2=m_src2*180.0/PI*3600;tmp.Format("%f",m_src2);m_edtsrc2.SetWindowText(tmp);
			}

			tmp.Format("%f",m_src3);m_edtsrc3.SetWindowText(tmp);
		}
		else
		{
			tmp.Format("%f",m_src1);m_edtsrc1.SetWindowText(tmp);		
			tmp.Format("%f",m_src2);m_edtsrc2.SetWindowText(tmp);
			tmp.Format("%f",m_src3);m_edtsrc3.SetWindowText(tmp);
		}
	}
	if(flag & 0x2){//dest
		if (1 == m_DestCoordType) {//initialize the value of Cedit control
			switch(m_DestBLUnit) {
			case 0://dd:mm:ss
				m_dest1=m_dest1*180.0/PI;	
				dd=m_dest1;		mm=(m_dest1-dd)*60;		ss=((m_dest1-dd)*60-mm)*60;
				tmp.Format("%d:%d:%f",dd,mm,ss);m_edtdest1.SetWindowText(tmp);

				m_dest2=m_dest2*180.0/PI;
				dd=m_dest2;		mm=(m_dest2-dd)*60;		ss=((m_dest2-dd)*60-mm)*60;
				tmp.Format("%d:%d:%f",dd,mm,ss);m_edtdest2.SetWindowText(tmp);
				break;
			case 1://dd°mm′ss″
				m_dest1=m_dest1*180.0/PI;	
				dd=m_dest1;		mm=(m_dest1-dd)*60;		ss=((m_dest1-dd)*60-mm)*60;
				tmp.Format("%d°%d′%f″",dd,mm,ss);m_edtdest1.SetWindowText(tmp);

				m_dest2=m_dest2*180.0/PI;
				dd=m_dest2;		mm=(m_dest2-dd)*60;		ss=((m_dest2-dd)*60-mm)*60;
				tmp.Format("%d°%d′%f″",dd,mm,ss);m_edtdest2.SetWindowText(tmp);
				break;
			case 2://degree
				m_dest1=m_dest1*180.0/PI;tmp.Format("%f",m_dest1);m_edtdest1.SetWindowText(tmp); 
				m_dest2=m_dest2*180.0/PI;tmp.Format("%f",m_dest2);m_edtdest2.SetWindowText(tmp);
				break;
			case 3://radian
				tmp.Format("%f",m_dest1);m_edtdest1.SetWindowText(tmp); 
				tmp.Format("%f",m_dest2);m_edtdest2.SetWindowText(tmp);
				break;
			default://second
				m_dest1=m_dest1*180.0/PI*3600;tmp.Format("%f",m_dest1);m_edtdest1.SetWindowText(tmp); 
				m_dest2=m_dest2*180.0/PI*3600;tmp.Format("%f",m_dest2);m_edtdest2.SetWindowText(tmp);
			}

			tmp.Format("%f",m_dest3);m_edtdest3.SetWindowText(tmp);
		}
		else
		{
			tmp.Format("%f",m_dest1);m_edtdest1.SetWindowText(tmp);		
			tmp.Format("%f",m_dest2);m_edtdest2.SetWindowText(tmp);
			tmp.Format("%f",m_dest3);m_edtdest3.SetWindowText(tmp);
		}
	}
}

void CDatumTranPara::OnBnClickedRadSrcCar()
{
	// TODO: 在此添加控件通知处理程序代码
	m_SrcCoordType = 0;
}

void CDatumTranPara::OnBnClickedRadSrcGeo()
{
	// TODO: 在此添加控件通知处理程序代码
	m_SrcCoordType = 1;
}

void CDatumTranPara::OnCbnSelchangeSrcUnit()
{
	int n=m_cmbSrcUnit.GetCurSel();
	if(m_SrcBLUnit != n)
	{
		RetrieveDataFromCtrl(1);
		m_SrcBLUnit = n;
		InitializeDataToCtrl(1);
	}
}

void CDatumTranPara::OnCbnSelchangeDestUnit()
{
	int n=m_cmbDestUnit.GetCurSel();
	if(m_DestBLUnit != n)
	{
		RetrieveDataFromCtrl(2);
		m_DestBLUnit = n;
		InitializeDataToCtrl(2);
	}
}

void CDatumTranPara::OnBnClickedAdd()
{
	//update retrieve data from controls;
//	UpdateData(TRUE);
	RetrieveDataFromCtrl();
	//save data and show those in list control;
	CString strtmp;
	char num[4];
	
	//num of record
	m_num = m_list_Data.GetItemCount();	
	if(m_num>99) {
		AfxMessageBox(GetResString(IDS_DATUMTRAN_TOOMUCHDATA));
		return;
	}
	_itoa_s(m_num,num,3,10);
	m_list_Data.InsertItem(m_num++,num);
	//for each subitem;
	int j=1;
	m_edtsrc1.GetWindowText(strtmp);m_list_Data.SetItemText(m_num-1,j++,strtmp);
	m_edtsrc2.GetWindowText(strtmp);m_list_Data.SetItemText(m_num-1,j++,strtmp);
	m_edtsrc3.GetWindowText(strtmp);m_list_Data.SetItemText(m_num-1,j++,strtmp);
	m_edtdest1.GetWindowText(strtmp);m_list_Data.SetItemText(m_num-1,j++,strtmp);
	m_edtdest2.GetWindowText(strtmp);m_list_Data.SetItemText(m_num-1,j++,strtmp);
	m_edtdest3.GetWindowText(strtmp);m_list_Data.SetItemText(m_num-1,j++,strtmp);
}

void CDatumTranPara::OnBnClickedDelete()
{
	UINT i, uCount = m_list_Data.GetSelectedCount();
	int  nItem = -1;

	// Update all of the selected items.
	if (uCount > 0)
	{
		for (i=0;i < uCount;i++)
		{
			nItem = m_list_Data.GetNextItem(-1, LVNI_SELECTED);
			if(nItem == -1)
				nItem++;
			m_list_Data.DeleteItem(nItem);
		}
		//modify num;
		uCount = m_list_Data.GetItemCount();
		char num[4];
		for (i=0;i< uCount; i++){
			_itoa_s(i,num,3,10);
			m_list_Data.SetItemText(i,0,num);
		}
	}
	else//delete last record;
	{
		i=m_list_Data.GetItemCount();
		m_list_Data.DeleteItem(i-1);
	}
}

void CDatumTranPara::OnBnClickedOk()
{
	if(((CComboBox*)GetDlgItem(IDC_SRC_ELLIP))->GetCurSel() ==
		((CComboBox*)GetDlgItem(IDC_DEST_ELLIP))->GetCurSel()){
			AfxMessageBox(GetResString(IDS_ALARM1));
			return;
	}
	_datumtran.tx = m_Tx;
	_datumtran.ty = m_Ty;
	_datumtran.tz = m_Tz;
	_datumtran.wx = m_Wx;
	_datumtran.wy = m_Wy;
	_datumtran.wz = m_Wz;
	_datumtran.factor =  m_factor;
	_datumtran.model = m_cmbModelID.GetCurSel()+1;
	_datumtran.srcellip = ((CComboBox*)GetDlgItem(IDC_SRC_ELLIP))->GetCurSel();
	_datumtran.destellip = ((CComboBox*)GetDlgItem(IDC_DEST_ELLIP))->GetCurSel();
	_bwsmodify = TRUE;
	OnOK();
}

void CDatumTranPara::Localize()
{
	SetWindowText(GetResString(IDS_CALDATUMPARA));
	GetDlgItem(IDC_NAME)->SetWindowText(GetResString(IDS_NAME));
	GetDlgItem(IDC_MODEL)->SetWindowText(GetResString(IDS_MODEL));
	GetDlgItem(IDC_RAD_ASSIGN)->SetWindowText(GetResString(IDS_ASSIGNPARA));
	GetDlgItem(IDC_RAD_CALCULATE)->SetWindowText(GetResString(IDS_CALPARA));
	GetDlgItem(IDC_SRCCOORD)->SetWindowText(GetResString(IDS_SRCCOORD));
	GetDlgItem(IDC_DESTCOORD)->SetWindowText(GetResString(IDS_DESTCOORD));
	GetDlgItem(IDC_RAD_SRC_CAR)->SetWindowText(GetResString(IDS_ECEF));
	GetDlgItem(IDC_RAD_DEST_CAR)->SetWindowText(GetResString(IDS_ECEF));
	GetDlgItem(IDC_RAD_SRC_GEO)->SetWindowText(GetResString(IDS_GEO));
	GetDlgItem(IDC_RAD_DEST_GEO)->SetWindowText(GetResString(IDS_GEO));
	GetDlgItem(IDC_SRCELLIP)->SetWindowText(GetResString(IDS_ELLIPSOID));
	GetDlgItem(IDC_DESTELLIP)->SetWindowText(GetResString(IDS_ELLIPSOID));

	GetDlgItem(ID_ADD)->SetWindowText(GetResString(IDS_ADD));
	GetDlgItem(ID_DELETE)->SetWindowText(GetResString(IDS_DELETE));
	GetDlgItem(ID_IMPORT)->SetWindowText(GetResString(IDS_IMPORT));
	GetDlgItem(ID_CALCULATE)->SetWindowText(GetResString(IDS_CAL));
	GetDlgItem(IDOK)->SetWindowText(GetResString(IDS_OK));	

	GetDlgItem(IDC_PARA)->SetWindowText(GetResString(IDS_PARA));
	GetDlgItem(IDC_TRANSLATION)->SetWindowText(GetResString(IDS_TRANSLATIONPARA));
	GetDlgItem(IDC_ROTATION)->SetWindowText(GetResString(IDS_ROTATIONPARA));
	GetDlgItem(IDC_FACTOR)->SetWindowText(GetResString(IDC_DATUMFACTOR));
	UpdateData(FALSE);
}
void CDatumTranPara::OnBnClickedCalculate()
{
	if(((CComboBox*)GetDlgItem(IDC_SRC_ELLIP))->GetCurSel() ==
		((CComboBox*)GetDlgItem(IDC_DEST_ELLIP))->GetCurSel()){
		AfxMessageBox(GetResString(IDS_ALARM1));
		return;
	}
	u1 nCount=m_list_Data.GetItemCount();
	if (nCount<3)	{
		AfxMessageBox(GetResString(IDS_ALARM2));
		return;
	}
	//name the parameters.
	CString tmp;
	((CComboBox*)GetDlgItem(IDC_SRC_ELLIP))->GetWindowText(tmp);
	m_tranName=tmp + "_";
	((CComboBox*)GetDlgItem(IDC_DEST_ELLIP))->GetWindowText(tmp);
	m_tranName += tmp;
	m_cmbModelID.GetWindowText(tmp);
	m_tranName = m_tranName +"_"+tmp;

	//	CVector 
	UpdateData(FALSE);
}

void CDatumTranPara::OnCbnSelchangeSrcEllip()
{
	//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.GetWindowText(tmp);
	m_tranName = m_tranName +"_"+tmp;
	UpdateData(FALSE);
}

void CDatumTranPara::OnCbnSelchangeDestEllip()
{
	//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.GetWindowText(tmp);
	m_tranName = m_tranName +"_"+tmp;
	UpdateData(FALSE);
}

⌨️ 快捷键说明

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