// ShowHZDistanceDlg.cpp : 实现文件 // #include "stdafx.h" #include "ShowHZDistanceDlg.h" //#include "afxdialogex.h" #include "Globe.h" #include // CShowHZDistanceDlg 对话框 // IMPLEMENT_DYNAMIC(CShowHZDistanceDlg, CDialog) CShowHZDistanceDlg::CShowHZDistanceDlg(CWnd* pParent /*=NULL*/) : CDialog(CShowHZDistanceDlg::IDD, pParent) { ResetCoordinateData(); } CShowHZDistanceDlg::~CShowHZDistanceDlg() { } void CShowHZDistanceDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); DDX_Text(pDX, IDC_PT1_LAT, m_pt1Lat); DDX_Text(pDX, IDC_PT2_LAT, m_pt2Lat); DDX_Text(pDX, IDC_PT1_LON, m_pt1Lon); DDX_Text(pDX, IDC_PT2_LON, m_pt2Lon); DDX_Text(pDX, IDC_HZ_DISTANCE, m_strHZDistance); DDX_Text(pDX, IDC_AZ_ANGLE, m_strAZAngle); } BEGIN_MESSAGE_MAP(CShowHZDistanceDlg, CDialog) END_MESSAGE_MAP() // CShowHZDistanceDlg 消息处理程序 void CShowHZDistanceDlg::OnCancel() { ResetCoordinateData(); // TODO: 在此添加专用代码和/或调用基类 //发送主程序,标识已经关闭 if (g_mapHwnd != NULL) { ::PostMessage(g_mapHwnd, WM_CLOSE_DISTANCE_DIALOG, 0, 0); } CDialog::OnCancel(); } //输入点的坐标 //输入:经度lon(以度为单位),纬度lat(以度为单位) void CShowHZDistanceDlg::SetPtCoordinate(const double lon, const double lat) { if (!m_bHaveOnePoint) { m_bHaveOnePoint = true; m_pt1Lon = lon; m_pt1Lat = lat; m_pt2Lon = 0.0; m_pt2Lat = 0.0; m_strHZDistance = _T(""); m_strAZAngle = _T(""); } else { m_bHaveOnePoint = false; m_pt2Lon = lon; m_pt2Lat = lat; //计算两点之间的水平距离 Cal2PtsDisAZ(); } UpdateData(FALSE); } //功能:计算两点之间的水平距离 void CShowHZDistanceDlg::Cal2PtsDisAZ() { double distance = 0; double azValue = 0; //计算两点之间的距离和方位角 CalculateTwoPtsDistanceAzimuth(distance, azValue, m_pt1Lon, m_pt1Lat, m_pt2Lon, m_pt2Lat, 3); m_strHZDistance.Format("%.4fkm", distance*0.001); m_strAZAngle.Format("%.1f", azValue); } //功能:初始化所有数据 void CShowHZDistanceDlg::ResetCoordinateData() { m_hzDistance = 0.0; m_pt1Lat = 0.0; m_pt2Lat = 0.0; m_pt1Lon = 0.0; m_pt2Lon = 0.0; m_bHaveOnePoint = false; m_strHZDistance = _T(""); //方位角 m_strAZAngle = _T(""); } //功能:移动对话框到给定的显示区域 //输入:显示区域rcArea void CShowHZDistanceDlg::MoveToGivenArea(const CRect rcArea) { m_rcHZDistanceDlg = rcArea; m_rcHZDistanceDlg.top += 20; } BOOL CShowHZDistanceDlg::OnInitDialog() { CDialog::OnInitDialog(); //移动到固定的显示区域 SetWindowPos( &CWnd::wndTop, m_rcHZDistanceDlg.left, m_rcHZDistanceDlg.top, 0, 0, SWP_NOSIZE | SWP_NOACTIVATE | SWP_HIDEWINDOW ); return TRUE; // return TRUE unless you set the focus to a control // 异常: OCX 属性页应返回 FALSE }