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

📄 dlgcoordtrans.cpp

📁 GPS坐标转换软件与源程序 支持世界上大多数坐标框架下
💻 CPP
📖 第 1 页 / 共 5 页
字号:
// DlgCoordTrans.cpp : implementation file
//

#include "stdafx.h"
#include "coortran.h"
#include "DlgCoordTrans.h"
#include "./SelfFun/lang.h"
#include "./SelfFun/CVector.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif


vector<_refellipsoid> _refellip;
datumtran	_datumtran;
BOOL	_bwsmodify = FALSE;//flag of workspace is been modified.
/////////////////////////////////////////////////////////////////////////////
// CDlgAbout dialog


CDlgAbout::CDlgAbout(CWnd* pParent /*=NULL*/)
	: CDialog(CDlgAbout::IDD, pParent)
{
	//{{AFX_DATA_INIT(CDlgAbout)
		// NOTE: the ClassWizard will add member initialization here
	//}}AFX_DATA_INIT
}


void CDlgAbout::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CDlgAbout)
		// NOTE: the ClassWizard will add DDX and DDV calls here
	//}}AFX_DATA_MAP
}

BOOL CDlgAbout::OnInitDialog()
{
	m_wndLink1.m_link = _T("mailto:shengsir@gmail.com");
	m_wndLink1.SubclassDlgItem(IDC_EMAIL, this);
	return TRUE;
}

BEGIN_MESSAGE_MAP(CDlgAbout, CDialog)
	//{{AFX_MSG_MAP(CDlgAbout)
	
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CDlgAbout message handlers

/////////////////////////////////////////////////////////////////////////////
// CDlgProject dialog


CDlgProject::CDlgProject(CWnd* pParent /*=NULL*/)
	: CDialog(CDlgProject::IDD, pParent)
{
	//{{AFX_DATA_INIT(CDlgProject)
	m_k0 = 0.0;
	m_efalse = 0.0;
	m_nfalse = 0.0;
	m_lon0 = 0.0;
	//}}AFX_DATA_INIT
	m_bstandard=TRUE;
	m_NorS = 0;
}


void CDlgProject::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CDlgProject)
	DDX_Control(pDX, IDC_EDT_NFALSE, m_edtNfalse);
	DDX_Control(pDX, IDC_EDT_EFALSE, m_edtEfalse);
	DDX_Control(pDX, IDC_EDT_SCALEFACTOR, m_edtk0);
	DDX_Control(pDX, IDC_EDT_CM, m_edtCM);
	DDX_Control(pDX, IDC_CHK_BSTAND, m_chkBstandard);
	DDX_Control(pDX, IDC_CMB_PROJECTION, m_cmbProName);
	DDX_Text(pDX, IDC_EDT_SCALEFACTOR, m_k0);
	DDV_MinMaxDouble(pDX, m_k0, 0., 1.);
	DDX_Text(pDX, IDC_EDT_EFALSE, m_efalse);
	DDX_Text(pDX, IDC_EDT_NFALSE, m_nfalse);
	DDX_Text(pDX, IDC_EDT_CM, m_lon0);
	DDV_MinMaxDouble(pDX, m_lon0, -180., 180.);
	DDX_Control(pDX, IDC_RAD_N,m_radN);
	DDX_Control(pDX, IDC_RAD_S,m_radS);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CDlgProject, CDialog)
	//{{AFX_MSG_MAP(CDlgProject)
	ON_BN_CLICKED(IDC_CHK_BSTAND, OnChkBstand)
	ON_BN_CLICKED(IDC_RAD_N, OnRadN)
	ON_BN_CLICKED(IDC_RAD_S, OnRadS)
	ON_CBN_SELCHANGE(IDC_CMB_PROJECTION, OnSelchangeProjection)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CDlgProject message handlers

BOOL CDlgProject::OnInitDialog() 
{
	CDialog::OnInitDialog();
	theLang.SetLanguage();
	Localize();
	m_cmbProName.AddString("UTM");
	m_cmbProName.AddString("高斯六度带");
	m_cmbProName.AddString("高斯三度带");
	m_cmbProName.AddString("高斯投影簇");
	m_cmbProName.AddString("兰勃脱投影");
	m_cmbProName.AddString("自定义");
	
	m_cmbProName.SetCurSel(0);
	m_chkBstandard.SetCheck(BST_CHECKED);
	m_radN.SetCheck(1);
	m_NorS = 'N';
	m_k0=0.9996;
	m_efalse = 500000.0;
	OnSelchangeProjection();
	return TRUE; 
}

void CDlgProject::OnSelchangeProjection() 
{
	int sel=m_cmbProName.GetCurSel();
	int count=m_cmbProName.GetCount();
	//set standard bit to one.(bit0) and //set lon0 bit to 1;
	//check,radio,lon0,k0, efalse,nfalse---> bit 0 1 2 3 4 5 6 .
	unsigned char flag=0;
	if(m_bstandard)
		flag |=0x1;	
	flag |= 0x4;	flag |= 0x2;
	
	switch(sel) {
		case 0://utm;
			m_nfalse=0;	m_efalse=500000;	m_k0=0.9996;
			break;
		case 1://gauss six band
			m_nfalse=0;	m_efalse=500000;	m_k0=1;
			break;
		case 2:
			flag=0xff;
			break;
		case 3://gause map projection cluster.
			flag =0xff;
			flag &= 0xfe;
			m_nfalse=0;		m_efalse=500000;		m_k0=1;
			break;
		case 5:	//selfdefine.
			flag =0xff;			flag &= 0xfe;
			break;
		default:
			AfxMessageBox("error");
			break; 
	}
	SetState(flag);
	UpdateData(FALSE);
}

void CDlgProject::OnChkBstand() 
{
	// TODO: Add your control notification handler code here
	m_bstandard == TRUE? m_bstandard = FALSE:m_bstandard=TRUE;
	unsigned char flag=0;
	if(m_bstandard){
		//set standard bit to one.(bit0) and //set lon0 bit to 1;
		flag |=0x1;		flag |= 0x4;	
		int sel=m_cmbProName.GetCurSel();
		switch(sel) {
		case 0://utm;
			m_nfalse=0;	m_efalse=500000;	m_k0=0.9996;
			break;
		case 1://gauss six band
			m_nfalse=0;	m_efalse=500000;	m_k0=1;
			break;
		case 2:
			break;
		case 3://gause map projection cluster.
//			flag |=0x1;
			m_nfalse=0;		m_efalse=500000;	m_k0=1;
			break;
		default:
			break; 
		}
	}
	else{// non standard. set all enable except standard control
		flag = 0xff;
		//set standard bit to zero.(bit0)
		flag &=0xFE;	//1111 1110
	}	
	m_NorS == 'N' ? flag |= 0x2 : flag &= 0xFD;	//0xfd=1111 1101
	SetState(flag);
	UpdateData(FALSE);
}
//unsigned char 0-255,each bit indicate the state of control:
//check,radio,lon0,k0, efalse,nfalse---> bit 0 1 2 3 4 5 6 .
void CDlgProject::SetState(unsigned char flag/* =0xff */)
{
	(flag & 0x1) ? m_chkBstandard.SetCheck(1) :	m_chkBstandard.SetCheck(0);
	if(flag & 0x2)
		m_radN.SetCheck(0x01),m_radS.SetCheck(0x00);
	else
 		m_radN.SetCheck(0x00),m_radS.SetCheck(0x01);
	(flag & 0x4) ? m_edtCM.EnableWindow(TRUE) : m_edtCM.EnableWindow(FALSE);
	(flag & 0x8) ? m_edtk0.EnableWindow(TRUE) : m_edtk0.EnableWindow(FALSE);
	(flag & 0x10)? m_edtNfalse.EnableWindow(TRUE) : m_edtNfalse.EnableWindow(FALSE);
	(flag & 0x20)? m_edtEfalse.EnableWindow(TRUE) : m_edtEfalse.EnableWindow(FALSE);
		
}

void CDlgProject::OnRadN() 
{
	// TODO: Add your control notification handler code here
	if(m_chkBstandard.GetCheck())
	{
		m_efalse=500000.0;
		m_nfalse=0.0;
		m_NorS='N';
	}
	UpdateData(FALSE);
}

void CDlgProject::OnRadS() 
{
	// TODO: Add your control notification handler code here
	if(m_chkBstandard.GetCheck())
	{
		m_efalse=500000.0;
		m_nfalse=10000000.0;
		m_NorS='S';
	}
	UpdateData(FALSE);
}

void CDlgProject::Localize()
{
	CString tmp=GetResString(IDS_PROJECTION);
	if(theLang.m_wLanguageID == LANGID_EN_US)//Map &Projection
		SetWindowText(tmp.Left(4)+tmp.Right(tmp.GetLength()-5));
	else
		SetWindowText(tmp.Left(tmp.GetLength()-4));
	GetDlgItem(IDC_PRONAME)->SetWindowText(GetResString(IDS_PRONAME));
	GetDlgItem(IDC_CHK_BSTAND)->SetWindowText(GetResString(IDS_STANDPARA));
	GetDlgItem(IDC_PROPARA)->SetWindowText(GetResString(IDS_PROPARA));
	GetDlgItem(IDC_CM)->SetWindowText(GetResString(IDS_CM));
	GetDlgItem(IDC_FACTOR)->SetWindowText(GetResString(IDS_FACTOR));
	GetDlgItem(IDC_FALSEE)->SetWindowText(GetResString(IDS_FALSEE));
	GetDlgItem(IDC_FALSEN)->SetWindowText(GetResString(IDS_FALSEN));
	GetDlgItem(IDOK)->SetWindowText(GetResString(IDS_OK));
	GetDlgItem(IDCANCEL)->SetWindowText(GetResString(IDS_CANCEL));

}

/////////////////////////////////////////////////////////////////////////////
// CDlgCoordTrans dialog


CDlgCoordTrans::CDlgCoordTrans(CWnd* pParent /*=NULL*/)
	: CDialog(CDlgCoordTrans::IDD, pParent)
{
	//{{AFX_DATA_INIT(CDlgCoordTrans)
	m_src_label1 = _T("");
	m_src_label2 = _T("");
	m_src_label3 = _T("");
	m_dest_label1 = _T("");
	m_dest_label2 = _T("");
	m_dest_label3 = _T("");
	m_dest2 = 0.0;
	m_dest3 = 0.0;
	m_src1  = 0.0;
	m_src2  = 0.0;
	m_src3  = 0.0;
	m_destzone = _T("");
	m_srczone = _T("");
	//}}AFX_DATA_INIT
	m_pParent=pParent;
//	hWnd = pParent->m_hWnd;
	m_SrcCoordType=1;
	m_DestCoordType=2;
	m_SrcBLUnit = m_DestBLUnit = 2;
	m_bProject	= FALSE;
	_bwsmodify = FALSE;
	m_k0 = 0.9996;
	m_lon0=0;
	m_NorS = 'N';
	m_hLangDLL = NULL;
}


void CDlgCoordTrans::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CDlgCoordTrans)
	DDX_Control(pDX, IDC_EDIT_SRCZONE, m_edtSrcZone);
	DDX_Control(pDX, IDC_EDIT_DESTZONE, m_edtDestZone);
	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_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_CHK_DATUM, m_chkDatum);
	DDX_Control(pDX, IDC_DEST_UNIT, m_cmbDestUnit);
	DDX_Control(pDX, IDC_SRC_UNIT, m_cmbSrcUnit);
	DDX_Control(pDX, IDC_DEST_ELLIP, m_cmbDestEllip);
	DDX_Control(pDX, IDC_SRC_ELLIP, m_cmbSrcEllip);
	DDX_Control(pDX, IDC_RAD_SRC_CAR, m_btnSrcCAR);
	DDX_Control(pDX, IDC_RAD_SRC_GEO, m_btnSrcGEO);
	DDX_Control(pDX, IDC_RAD_SRC_PLAN, m_btnSrcPLAN);
	DDX_Control(pDX, IDC_RAD_DEST_CAR, m_btnDestCAR);
	DDX_Control(pDX, IDC_RAD_DEST_GEO, m_btnDestGEO);
	DDX_Control(pDX, IDC_RAD_DEST_PLAN, m_btnDestPLAN);
	DDX_Text(pDX, IDC_STATIC_SRC1, m_src_label1);
	DDV_MaxChars(pDX, m_src_label1, 3);
	DDX_Text(pDX, IDC_STATIC_SRC2, m_src_label2);
	DDV_MaxChars(pDX, m_src_label2, 3);
	DDX_Text(pDX, IDC_STATIC_SRC3, m_src_label3);
	DDV_MaxChars(pDX, m_src_label3, 3);
	DDX_Text(pDX, IDC_STATIC_DEST1, m_dest_label1);
	DDV_MaxChars(pDX, m_dest_label1, 3);
	DDX_Text(pDX, IDC_STATIC_DEST2, m_dest_label2);
	DDV_MaxChars(pDX, m_dest_label2, 3);
	DDX_Text(pDX, IDC_STATIC_DEST4, m_dest_label3);
	DDV_MaxChars(pDX, m_dest_label3, 3);
	DDX_Text(pDX, IDC_EDIT_DESTZONE, m_destzone);
	DDV_MaxChars(pDX, m_destzone, 3);
	DDX_Text(pDX, IDC_EDIT_SRCZONE, m_srczone);
	DDV_MaxChars(pDX, m_srczone, 3);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CDlgCoordTrans, CDialog)
	//{{AFX_MSG_MAP(CDlgCoordTrans)
	ON_BN_CLICKED(IDB_TRANSFORM, OnCoordTrans)
	ON_CBN_SELCHANGE(IDC_DEST_ELLIP, OnSelchangeDestEllip)
	ON_CBN_SELCHANGE(IDC_SRC_ELLIP, OnSelchangeSrcEllip)
	ON_BN_CLICKED(IDC_RAD_SRC_CAR, OnRadSrcCar)
	ON_BN_CLICKED(IDC_RAD_SRC_GEO, OnRadSrcGeo)
	ON_BN_CLICKED(IDC_RAD_DEST_CAR, OnRadDestCar)
	ON_BN_CLICKED(IDC_RAD_DEST_GEO, OnRadDestGeo)
	ON_BN_CLICKED(IDC_RAD_DEST_PLAN, OnRadDestPlan)
	ON_BN_CLICKED(IDC_RAD_SRC_PLAN, OnRadSrcPlan)
	ON_CBN_SELCHANGE(IDC_SRC_UNIT, OnSelchangeSrcUnit)
	ON_CBN_SELCHANGE(IDC_DEST_UNIT, OnSelchangeDestUnit)
	ON_BN_CLICKED(IDC_CHK_DATUM, OnChkDatum)
	ON_COMMAND(IDM_DATUMTRANS, OnMenuDatumtrans)
	ON_COMMAND(IDM_PROJECTION, OnMenuProject)
	ON_COMMAND(IDM_ABOUT,OnAppAbout)
	ON_COMMAND(IDM_FILE_SAVE, OnFileSave)
	ON_COMMAND(IDM_FILE_OPEN, OnFileOpen)
	ON_BN_CLICKED(IDB_DATA_EXCHANGE, OnDataExchange)
	//}}AFX_MSG_MAP
	ON_COMMAND(ID_LANGUAGE_SIMPLECHINESE, &CDlgCoordTrans::OnLangzhCN)
	ON_COMMAND(ID_LANGUAGE_ENGLISH, &CDlgCoordTrans::OnLangEn)
	ON_COMMAND(IDM_ELLIP, &CDlgCoordTrans::OnEllip)
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CDlgCoordTrans message handlers
void CDlgCoordTrans::OnAppAbout()
{
	CDlgAbout aboutDlg;
	aboutDlg.DoModal();
}
void CDlgCoordTrans::OnCancel() 
{
	/*If you implement the Cancel button in a modeless dialog box, 
	you must override the OnCancel member function and call DestroyWindow from within it. 
	Don't call the base-class member function, because it calls EndDialog, 
	which will make the dialog box invisible but not destroy it
	*/
//	::SendMessage(hWnd,WM_DELETE_DLGCOORD,0,0);
//	DestroyWindow();
	if(_bwsmodify && AfxMessageBox(GetResString(IDS_CLOSESAVE),MB_YESNO) == IDYES)
		OnFileSave();
	CDialog::OnCancel();
}

BOOL CDlgCoordTrans::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
	FILE* fp;
	CString path;
	char str[256];
	//read ini file.
	path = theLang.GetDirectory(EXECUTABLEDIR,TRUE);
	path += "coord.ini";
	if(!fopen_s(&fp,path,"r"))//read success
	{

⌨️ 快捷键说明

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