// LonLatDlg.cpp : ʵÏÖÎļþ // #include "stdafx.h" #include "LonLatDlg.h" //#include "afxdialogex.h" #include "Globe.h" #include "afxwin.h" #include "afxdialogex.h" // CLonLatDlg ¶Ô»°¿ò 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); DDX_Control(pDX, IDC_CONFIRM_BTN, m_BtnOK); } 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 ÏûÏ¢´¦Àí³ÌÐò //»ñÈ¡ÊÇ·ñÊÖ¶¯ÊäÈë״̬ bool CLonLatDlg::GetAutoEditStatus() { return m_isMouseMove; } //ÊäÈë¾¶È¡¢Î³¶È£¬²¢ÏÔʾ³öÀ´ //ÊäÈ룺¾¶Èlon£¬Î³¶Èlat void CLonLatDlg::SetLonLatInfo(const double lon, const double lat) { if (posTypeID==0) //¶È { m_lon = lon; m_lat = lat; UpdateData(FALSE); } else if (posTypeID==1) // ¶È·ÖÃë { 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() { //·¢ËÍÖ÷³ÌÐò£¬±êʶÒѾ¹Ø±Õ if (g_mapHwnd != NULL) { ::PostMessage(g_mapHwnd, WM_CLOSE_LONLAT_DIALOG, 0, 0); } CDialog::OnCancel(); } //¹¦ÄÜ£ºÒƶ¯¶Ô»°¿òµ½¸ø¶¨µÄÏÔÊ¾ÇøÓò 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); // ÉèÖÃĬÈÏδѡÖÐ״̬ m_isMouseMove = true; m_coord_type.AddString(_T("¶È")); m_coord_type.AddString(_T("¶È·ÖÃë")); m_coord_type.SetCurSel(0); lastTypeID = 0; return TRUE; // return TRUE unless you set the focus to a control // Òì³£: OCX ÊôÐÔÒ³Ó¦·µ»Ø FALSE } void CLonLatDlg::OnBnClickedConfirmBtn() { // TODO: ÔÚ´ËÌí¼Ó¿Ø¼þ֪ͨ´¦Àí³ÌÐò´úÂë 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); } // ¡®ÊÖ¶¯ÊäÈ롯µ¥Ñ¡¿ò±ä»¯Ê±´¥·¢º¯Êý void CLonLatDlg::OnBnClickedCheck1() { // TODO: ÔÚ´ËÌí¼Ó¿Ø¼þ֪ͨ´¦Àí³ÌÐò´úÂë if (m_CheckBox.GetCheck() == BST_CHECKED) { // ¸´Ñ¡¿ò±»Ñ¡ÖÐ m_isMouseMove = false; // Îı¾¿òÉèΪ¿É±à¼ m_lon_edit.SetReadOnly(FALSE); m_lat_edit.SetReadOnly(FALSE); } else { // ¸´Ñ¡¿òδѡÖÐ m_isMouseMove = true; // Îı¾¿òÉèΪֻ¶Á m_lon_edit.SetReadOnly(TRUE); m_lat_edit.SetReadOnly(TRUE); } } // ×ø±êÀàÐ͸ıäʼþ void CLonLatDlg::OnCbnSelchangeComboType() { std::string splitSymbol = "EWNSs+\/-,;¡ã¶È¡ä£§¡¯·Ö\"£¢¡±Ãë¡¢£¬£» "; CString strLat,strLon; m_lat_edit.GetWindowTextA(strLat); m_lon_edit.GetWindowTextA(strLon); posTypeID = m_coord_type.GetCurSel(); //TRACE(_T("µ±Ç°Ñ¡Ôñ %d\n"),posTypeID); if (lastTypeID == posTypeID) //ÀàÐÍδ¸Ä±ä£¬²»Ö´ÐÐ×ø±ê±ä»» { return; } else { lastTypeID = posTypeID; // ¸üÐÂ×ø±ê·½Ê½ } if (posTypeID==0) //¶È { 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) //¶È·ÖÃë { 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()); } }