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

📄 dlgcoordtrans.cpp

📁 GPS坐标转换软件与源程序 支持世界上大多数坐标框架下
💻 CPP
📖 第 1 页 / 共 5 页
字号:
	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 + -