|
|
|
|
// LonLatDlg.cpp : ʵ<><CAB5><EFBFBD>ļ<EFBFBD>
|
|
|
|
|
//
|
|
|
|
|
|
|
|
|
|
#include "stdafx.h"
|
|
|
|
|
#include "LonLatDlg.h"
|
|
|
|
|
//#include "afxdialogex.h"
|
|
|
|
|
#include "Globe.h"
|
|
|
|
|
#include "afxwin.h"
|
|
|
|
|
|
|
|
|
|
// CLonLatDlg <20>Ի<EFBFBD><D4BB><EFBFBD>
|
|
|
|
|
|
|
|
|
|
IMPLEMENT_DYNAMIC(CLonLatDlg, CDialog)
|
|
|
|
|
|
|
|
|
|
CLonLatDlg::CLonLatDlg(CWnd* pParent /*=NULL*/)
|
|
|
|
|
: CDialog(CLonLatDlg::IDD, pParent)
|
|
|
|
|
{
|
|
|
|
|
//EnableVisualManagerStyle(TRUE, TRUE);
|
|
|
|
|
m_lon = 0.0;
|
|
|
|
|
m_lat = 0.0;
|
|
|
|
|
posTypeID = 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
CLonLatDlg::~CLonLatDlg()
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void CLonLatDlg::DoDataExchange(CDataExchange* pDX)
|
|
|
|
|
{
|
|
|
|
|
CDialog::DoDataExchange(pDX);
|
|
|
|
|
DDX_Text(pDX, IDC_EDIT_LON, m_lon);
|
|
|
|
|
DDX_Text(pDX, IDC_EDIT_LAT, m_lat);
|
|
|
|
|
DDX_Control(pDX, IDC_EDIT_LON, m_lon_edit);
|
|
|
|
|
DDX_Control(pDX, IDC_EDIT_LAT, m_lat_edit);
|
|
|
|
|
DDX_Control(pDX, IDC_COMBO_TYPE_XY, m_coord_type);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
BEGIN_MESSAGE_MAP(CLonLatDlg, CDialog)
|
|
|
|
|
ON_BN_CLICKED(IDC_CONFIRM_BTN, &CLonLatDlg::OnBnClickedConfirmBtn)
|
|
|
|
|
ON_BN_CLICKED(IDC_CHECK1, &CLonLatDlg::OnBnClickedCheck1)
|
|
|
|
|
ON_CBN_SELCHANGE(IDC_COMBO_TYPE_XY, &CLonLatDlg::OnCbnSelchangeComboType)
|
|
|
|
|
END_MESSAGE_MAP()
|
|
|
|
|
|
|
|
|
|
// CLonLatDlg <20><>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
|
|
|
|
//<2F><>ȡ<EFBFBD>Ƿ<EFBFBD><C7B7>ֶ<EFBFBD><D6B6><EFBFBD><EFBFBD><EFBFBD>״̬
|
|
|
|
|
bool CLonLatDlg::GetAutoEditStatus()
|
|
|
|
|
{
|
|
|
|
|
return m_isMouseMove;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD>뾭<EFBFBD>ȡ<EFBFBD>γ<EFBFBD>ȣ<EFBFBD><C8A3><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>
|
|
|
|
|
//<2F><><EFBFBD>룺<EFBFBD><EBA3BA><EFBFBD><EFBFBD>lon<6F><6E>γ<EFBFBD><CEB3>lat
|
|
|
|
|
void CLonLatDlg::SetLonLatInfo(const double lon, const double lat)
|
|
|
|
|
{
|
|
|
|
|
if (posTypeID==0) //<2F><>
|
|
|
|
|
{
|
|
|
|
|
m_lon = lon;
|
|
|
|
|
m_lat = lat;
|
|
|
|
|
UpdateData(FALSE);
|
|
|
|
|
}
|
|
|
|
|
else if (posTypeID==1) // <20>ȷ<EFBFBD><C8B7><EFBFBD>
|
|
|
|
|
{
|
|
|
|
|
string str_lat,str_lon;
|
|
|
|
|
angle.getDMSString(lon,lat,str_lon,str_lat);
|
|
|
|
|
SetDlgItemText(IDC_EDIT_LON,str_lon.c_str());
|
|
|
|
|
SetDlgItemText(IDC_EDIT_LAT,str_lat.c_str());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void CLonLatDlg::OnCancel()
|
|
|
|
|
{
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʶ<EFBFBD>Ѿ<EFBFBD><D1BE>ر<EFBFBD>
|
|
|
|
|
if (g_mapHwnd != NULL)
|
|
|
|
|
{
|
|
|
|
|
::PostMessage(g_mapHwnd, WM_CLOSE_LONLAT_DIALOG, 0, 0);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
CDialog::OnCancel();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD>ܣ<EFBFBD><DCA3>ƶ<EFBFBD><C6B6>Ի<EFBFBD><D4BB><EFBFBD><F2B5BDB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>
|
|
|
|
|
void CLonLatDlg::MoveToGivenArea(const CRect rcArea)
|
|
|
|
|
{
|
|
|
|
|
m_rcDlgArea = rcArea;
|
|
|
|
|
m_rcDlgArea.top += 20;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
BOOL CLonLatDlg::OnInitDialog()
|
|
|
|
|
{
|
|
|
|
|
CDialog::OnInitDialog();
|
|
|
|
|
|
|
|
|
|
SetWindowPos( &CWnd::wndTop, m_rcDlgArea.left, m_rcDlgArea.top, 0, 0, SWP_NOSIZE | SWP_NOACTIVATE | SWP_HIDEWINDOW );
|
|
|
|
|
|
|
|
|
|
m_CheckBox.SubclassDlgItem(IDC_CHECK1, this);
|
|
|
|
|
m_CheckBox.SetCheck(BST_UNCHECKED); // <20><><EFBFBD><EFBFBD>Ĭ<EFBFBD><C4AC>δѡ<CEB4><D1A1>״̬
|
|
|
|
|
|
|
|
|
|
m_isMouseMove = true;
|
|
|
|
|
m_coord_type.AddString(_T("<EFBFBD><EFBFBD>"));
|
|
|
|
|
m_coord_type.AddString(_T("<EFBFBD>ȷ<EFBFBD><EFBFBD><EFBFBD>"));
|
|
|
|
|
m_coord_type.SetCurSel(0);
|
|
|
|
|
lastTypeID = 0;
|
|
|
|
|
return TRUE; // return TRUE unless you set the focus to a control
|
|
|
|
|
// <20>쳣: OCX <20><><EFBFBD><EFBFBD>ҳӦ<D2B3><D3A6><EFBFBD><EFBFBD> FALSE
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void CLonLatDlg::OnBnClickedConfirmBtn()
|
|
|
|
|
{
|
|
|
|
|
// TODO: <20>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD>ӿؼ<D3BF>֪ͨ<CDA8><D6AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
|
|
|
|
CString str_lon;
|
|
|
|
|
CString str_lat;
|
|
|
|
|
GetDlgItemText(IDC_EDIT_LON, str_lon);
|
|
|
|
|
GetDlgItemText(IDC_EDIT_LAT, str_lat);
|
|
|
|
|
double lon = _tstof(str_lon);
|
|
|
|
|
double lat = _tstof(str_lat);
|
|
|
|
|
//::SendMessage(g_mapHwnd, WM_SEND_MAPLOCATION, WPARAM(_tstof(lon)*1000000), LPARAM(_tstof(lat)*1000000));
|
|
|
|
|
::SendMessage(g_mapHwnd, WM_SEND_MAPLOCATION, (WPARAM)&lon, (LPARAM)&lat);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD>ֶ<EFBFBD><D6B6><EFBFBD><EFBFBD>롯<EFBFBD><EBA1AF>ѡ<EFBFBD><D1A1><EFBFBD>仯ʱ<E4BBAF><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
void CLonLatDlg::OnBnClickedCheck1()
|
|
|
|
|
{
|
|
|
|
|
// TODO: <20>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD>ӿؼ<D3BF>֪ͨ<CDA8><D6AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
if (m_CheckBox.GetCheck() == BST_CHECKED)
|
|
|
|
|
{
|
|
|
|
|
// <20><>ѡ<EFBFBD><D1A1><EFBFBD><EFBFBD>ѡ<EFBFBD><D1A1>
|
|
|
|
|
m_isMouseMove = false;
|
|
|
|
|
// <20>ı<EFBFBD><C4B1><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD>ɱ༭
|
|
|
|
|
m_lon_edit.SetReadOnly(FALSE);
|
|
|
|
|
m_lat_edit.SetReadOnly(FALSE);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
// <20><>ѡ<EFBFBD><D1A1>δѡ<CEB4><D1A1>
|
|
|
|
|
m_isMouseMove = true;
|
|
|
|
|
// <20>ı<EFBFBD><C4B1><EFBFBD><EFBFBD><EFBFBD>Ϊֻ<CEAA><D6BB>
|
|
|
|
|
m_lon_edit.SetReadOnly(TRUE);
|
|
|
|
|
m_lat_edit.SetReadOnly(TRUE);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ı<CDB8><C4B1>¼<EFBFBD>
|
|
|
|
|
void CLonLatDlg::OnCbnSelchangeComboType()
|
|
|
|
|
{
|
|
|
|
|
std::string splitSymbol = "EWNSs+\/-,;<3B><><EFBFBD>ȡ䣧<C8A1><E4A3A7><EFBFBD><EFBFBD>\"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>롢<EFBFBD><EFBFBD><EFBFBD><EFBFBD> ";
|
|
|
|
|
CString strLat,strLon;
|
|
|
|
|
m_lat_edit.GetWindowTextA(strLat);
|
|
|
|
|
m_lon_edit.GetWindowTextA(strLon);
|
|
|
|
|
|
|
|
|
|
posTypeID = m_coord_type.GetCurSel();
|
|
|
|
|
//TRACE(_T("<22><>ǰѡ<C7B0><D1A1> %d\n"),posTypeID);
|
|
|
|
|
if (lastTypeID == posTypeID) //<2F><><EFBFBD><EFBFBD>δ<EFBFBD>ı䣬<C4B1><E4A3AC>ִ<EFBFBD><D6B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>任
|
|
|
|
|
{
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
lastTypeID = posTypeID; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>귽ʽ
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (posTypeID==0) //<2F><>
|
|
|
|
|
{
|
|
|
|
|
double tarLon,tarLat;
|
|
|
|
|
|
|
|
|
|
vector<string> vec_lat = angle.split(strLat.GetBuffer(),splitSymbol);
|
|
|
|
|
vector<string> vec_lon = angle.split(strLon.GetBuffer(),splitSymbol);
|
|
|
|
|
|
|
|
|
|
int lon_d = stoi(vec_lon.at(0));
|
|
|
|
|
int lon_m = stoi(vec_lon.at(1));
|
|
|
|
|
double lon_s = stod(vec_lon.at(2));
|
|
|
|
|
angle.DmstoDeg(lon_d,lon_m,lon_s,tarLon);
|
|
|
|
|
|
|
|
|
|
int lat_d = stoi(vec_lat.at(0));
|
|
|
|
|
int lat_m = stoi(vec_lat.at(1));
|
|
|
|
|
double lat_s = stod(vec_lat.at(2));
|
|
|
|
|
angle.DmstoDeg(lat_d,lat_m,lat_s,tarLat);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
SetDlgItemText(IDC_EDIT_LON,angle.DoubleToString(tarLon).c_str());
|
|
|
|
|
SetDlgItemText(IDC_EDIT_LAT,angle.DoubleToString(tarLat).c_str());
|
|
|
|
|
}
|
|
|
|
|
else if (posTypeID==1) //<2F>ȷ<EFBFBD><C8B7><EFBFBD>
|
|
|
|
|
{
|
|
|
|
|
double lat,lon;
|
|
|
|
|
lat = _tstof(strLat);
|
|
|
|
|
lon = _tstof(strLon);
|
|
|
|
|
|
|
|
|
|
string str_lat,str_lon;
|
|
|
|
|
angle.getDMSString(lon,lat,str_lon,str_lat);
|
|
|
|
|
|
|
|
|
|
SetDlgItemText(IDC_EDIT_LON,str_lon.c_str());
|
|
|
|
|
SetDlgItemText(IDC_EDIT_LAT,str_lat.c_str());
|
|
|
|
|
}
|
|
|
|
|
}
|