📄 dlgcoordtrans.cpp
字号:
// 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 + -