📄 wptdlg.cpp
字号:
// WptDlg.cpp : implementation file
//
#include "stdafx.h"
#include "resource.h"
#include "WptDlg.h"
#include <stdlib.h>
#include <stdio.h>
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CWptDlg dialog
double Dms2Rad(double dms);
double Rad2Dms(double rad);
CWptDlg::CWptDlg(CWnd* pParent /*=NULL*/)
: CDialog(CWptDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CWptDlg)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
POSITION po=AfxGetApp()->GetFirstDocTemplatePosition();
CDocTemplate *pDocTem=AfxGetApp()->GetNextDocTemplate(po);
po=pDocTem->GetFirstDocPosition();
pDoc=(CGpsNavDoc *)pDocTem->GetNextDoc(po);
}
void CWptDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CWptDlg)
// NOTE: the ClassWizard will add DDX and DDV calls here
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CWptDlg, CDialog)
//{{AFX_MSG_MAP(CWptDlg)
ON_BN_CLICKED(IDC_ADD, OnAdd)
ON_BN_CLICKED(IDC_INSERT, OnInsert)
ON_BN_CLICKED(IDC_UPDATE, OnUpdate)
ON_BN_CLICKED(IDC_REMOVE, OnRemove)
ON_BN_CLICKED(IDC_REMOVEALL, OnRemoveall)
ON_BN_CLICKED(IDC_QUIT, OnQuit)
ON_WM_PAINT()
ON_LBN_SELCHANGE(IDC_LIST, OnSelchangeList)
ON_CBN_SELCHANGE(IDC_BISIS, OnSelchangeBisis)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CWptDlg message handlers
BOOL CWptDlg::OnInitDialog()
{
CDialog::OnInitDialog();
CComboBox *pBisis=(CComboBox *)GetDlgItem(IDC_BISIS);
pBisis->AddString(TEXT("BLH"));
pBisis->AddString(TEXT("XYH"));
pBisis->SetCurSel(0);
nBisis=0;
return TRUE;
}
void CWptDlg::OnAdd()
{
// TODO: Add your control notification handler code here
UpdateData();
CWayPoint wp;
CString str="";
double a,b,c;
unsigned short ls[20]=_T("");
char ch[20]="";
(GetDlgItem(IDC_EDITNAME))->GetWindowText(ls,20);
if(pDoc->m_Way.FindPoint(ls)!=-1)
{
::AfxMessageBox(_T("Point Name Exit!"),MB_OK);
return;
}
wp.SetPointName(ls);
int i=0;
memset(ch,0,20);
(GetDlgItem(IDC_EDITCX))->GetWindowText(str);
for(i=0;i<str.GetLength();i++)
ch[i]=(char)str[i];
ch[i]=0;
a=atof(ch);
memset(ch,0,20);
(GetDlgItem(IDC_EDITCY))->GetWindowText(str);
for(i=0;i<str.GetLength();i++)
ch[i]=(char)str[i];
ch[i]=0;
b=atof(ch);
memset(ch,0,20);
(GetDlgItem(IDC_EDITCH))->GetWindowText(str);
for(i=0;i<str.GetLength();i++)
ch[i]=(char)str[i];
ch[i]=0;
c=atof(ch);
if(nBisis==0)
{
a=Dms2Rad(a);
b=Dms2Rad(b);
DBLH dd={a,b,c};
wp.SetDblh(dd);
}
else
{
CXYH cc={a,b,c};
wp.SetCxyh(cc);
}
unsigned short lsf[20]=_T("");
unsigned short lst[20]=_T("");
int f=-1,t=-1;
if((f=pDoc->m_Way.GetFPoint())!=-1)
{
(pDoc->m_Way.GetWpts())[f].GetPointName(lsf);//
}
if((t=pDoc->m_Way.GetTPoint())!=-1)
{
(pDoc->m_Way.GetWpts())[t].GetPointName(lst);//
}
pDoc->m_Way.AddWpt(wp);
if(f!=-1)
{
pDoc->m_Way.SetFPoint(pDoc->m_Way.FindPoint(lsf));
}
if(t!=-1)
{
pDoc->m_Way.SetTPoint(pDoc->m_Way.FindPoint(lst));
}
(GetDlgItem(IDC_EDITNAME))->SetWindowText(_T(""));
(GetDlgItem(IDC_EDITCX))->SetWindowText(_T(""));
(GetDlgItem(IDC_EDITCY))->SetWindowText(_T(""));
(GetDlgItem(IDC_EDITCH))->SetWindowText(_T(""));
SendMessage(WM_PAINT);
}
void CWptDlg::OnInsert()
{
// TODO: Add your control notification handler code here
UpdateData();
CListBox *pWptList=(CListBox *)GetDlgItem(IDC_LIST);
if(pWptList->GetCurSel()==LB_ERR)
{
return;
}
unsigned short ls[20];
CWayPoint wp;
(GetDlgItem(IDC_EDITNAME))->GetWindowText(ls,20);
if(pDoc->m_Way.FindPoint(ls)!=-1)
{
::AfxMessageBox(_T("Point Name Exit!"),MB_OK);
return;
}
wp.SetPointName(ls);
CString str;
double a,b,c;
int i=0;
char ch[20]="";
memset(ch,0,20);
(GetDlgItem(IDC_EDITCX))->GetWindowText(str);
for(i=0;i<str.GetLength();i++)
ch[i]=(char)str[i];
ch[i]=0;
a=atof(ch);
memset(ch,0,20);
(GetDlgItem(IDC_EDITCY))->GetWindowText(str);
for(i=0;i<str.GetLength();i++)
ch[i]=(char)str[i];
ch[i]=0;
b=atof(ch);
memset(ch,0,20);
(GetDlgItem(IDC_EDITCH))->GetWindowText(str);
for(i=0;i<str.GetLength();i++)
ch[i]=(char)str[i];
ch[i]=0;
c=atof(ch);
if(nBisis==0)
{
a=Dms2Rad(a);
b=Dms2Rad(b);
DBLH dd={a,b,c};
wp.SetDblh(dd);
}
else
{
CXYH cc={a,b,c};
wp.SetCxyh(cc);
}
unsigned short lsf[20]=_T("");
unsigned short lst[20]=_T("");
int f=-1,t=-1;
if((f=pDoc->m_Way.GetFPoint())!=-1)
{
(pDoc->m_Way.GetWpts())[f].GetPointName(lsf);//
}
if((t=pDoc->m_Way.GetTPoint())!=-1)
{
(pDoc->m_Way.GetWpts())[t].GetPointName(lst);//
}
pDoc->m_Way.AddWpt(wp,pWptList->GetCurSel());
if(f!=-1)
{
pDoc->m_Way.SetFPoint(pDoc->m_Way.FindPoint(lsf));
}
if(t!=-1)
{
pDoc->m_Way.SetTPoint(pDoc->m_Way.FindPoint(lst));
}
(GetDlgItem(IDC_EDITNAME))->SetWindowText(_T(""));
(GetDlgItem(IDC_EDITCX))->SetWindowText(_T(""));
(GetDlgItem(IDC_EDITCY))->SetWindowText(_T(""));
(GetDlgItem(IDC_EDITCH))->SetWindowText(_T(""));
SendMessage(WM_PAINT);
}
void CWptDlg::OnUpdate()
{
UpdateData();
CListBox *pWptList=(CListBox *)GetDlgItem(IDC_LIST);
if(pWptList->GetCurSel()==LB_ERR)
{
return;
}
unsigned short ls[20];
(GetDlgItem(IDC_EDITNAME))->GetWindowText(ls,20);
if(pDoc->m_Way.FindPoint(ls)!=-1&&pDoc->m_Way.FindPoint(ls)!=pWptList->GetCurSel())
{
::AfxMessageBox(_T("Point Name Exit!"),MB_OK);
return;
}
CArray<CWayPoint,CWayPoint> &wps=pDoc->m_Way.GetWpts();
wps[pWptList->GetCurSel()].SetPointName(ls);
CString str;
double a,b,c;
int i=0;
char ch[20]="";
memset(ch,0,20);
(GetDlgItem(IDC_EDITCX))->GetWindowText(str);
for(i=0;i<str.GetLength();i++)
ch[i]=(char)str[i];
a=atof(ch);
memset(ch,0,20);
(GetDlgItem(IDC_EDITCY))->GetWindowText(str);
for(i=0;i<str.GetLength();i++)
ch[i]=(char)str[i];
b=atof(ch);
memset(ch,0,20);
(GetDlgItem(IDC_EDITCH))->GetWindowText(str);
for(i=0;i<str.GetLength();i++)
ch[i]=(char)str[i];
c=atof(ch);
if(nBisis==0)
{
a=Dms2Rad(a);
b=Dms2Rad(b);
DBLH dd={a,b,c};
wps[pWptList->GetCurSel()].SetDblh(dd);
}
else
{
CXYH cc={a,b,c};
wps[pWptList->GetCurSel()].SetCxyh(cc);
}
SendMessage(WM_PAINT);
}
void CWptDlg::OnRemove()
{
// TODO: Add your control notification handler code here
CListBox *pWptList=(CListBox *)GetDlgItem(IDC_LIST);
if(pWptList->GetCurSel()==LB_ERR)
{
return;
}
TCHAR lp1[40]=_T("");
TCHAR lp2[40]=_T("");
CArray<CWayPoint,CWayPoint> &wps=pDoc->m_Way.GetWpts();
wps[pWptList->GetCurSel()].GetPointName(lp1);
wsprintf(lp2,_T("Clear %s WayPoint?"),lp1);
if(::AfxMessageBox(lp2,MB_OKCANCEL)!=IDOK)
return;
pDoc->m_Way.DelWpt(pWptList->GetCurSel());
(GetDlgItem(IDC_EDITNAME))->SetWindowText(_T(""));
(GetDlgItem(IDC_EDITCX))->SetWindowText(_T(""));
(GetDlgItem(IDC_EDITCY))->SetWindowText(_T(""));
(GetDlgItem(IDC_EDITCH))->SetWindowText(_T(""));
SendMessage(WM_PAINT);
}
void CWptDlg::OnRemoveall()
{
if(pDoc->m_Way.GetWptNum()<=0)
{
return;
}
if(::AfxMessageBox(_T("Clear All WayPoints?"),MB_OKCANCEL)!=IDOK)
return;
pDoc->m_Way.DelAll();
(GetDlgItem(IDC_EDITNAME))->SetWindowText(_T(""));
(GetDlgItem(IDC_EDITCX))->SetWindowText(_T(""));
(GetDlgItem(IDC_EDITCY))->SetWindowText(_T(""));
(GetDlgItem(IDC_EDITCH))->SetWindowText(_T(""));
SendMessage(WM_PAINT);
}
void CWptDlg::OnQuit()
{
// TODO: Add your control notification handler code here
OnOK();
}
void CWptDlg::OnPaint()
{
CPaintDC dc(this); // device context for painting
// TODO: Add your message handler code here
CListBox *pWptList=(CListBox *)GetDlgItem(IDC_LIST);
CArray<CWayPoint,CWayPoint> &wps=pDoc->m_Way.GetWpts();
int num=pDoc->m_Way.GetWptNum();
CString str="";
unsigned short lpStr[20];
pWptList->ResetContent();
if(num>0)
{
for(int i=0;i<num;i++)
{
wps[i].GetPointName(lpStr);
str.Format(_T("%d.%s"),i+1,lpStr);
pWptList->AddString(str);
}
}
else
{
return;
}
if(pWptList->GetCurSel()==LB_ERR)
{
return;
}
unsigned short lp[20];
char ch[20];
wps[pWptList->GetCurSel()].GetPointName(lp);
(GetDlgItem(IDC_EDITNAME))->SetWindowText(lp);
if(nBisis==0)
{
DBLH dd;
wps[pWptList->GetCurSel()].GetD(dd);
memset(ch,0,20);
sprintf(ch,"%.6lf",Rad2Dms(dd.DB));
str=ch;
(GetDlgItem(IDC_EDITCX))->SetWindowText(str);
memset(ch,0,20);
sprintf(ch,"%.6lf",Rad2Dms(dd.DL));
str=ch;
(GetDlgItem(IDC_EDITCY))->SetWindowText(str);
memset(ch,0,20);
sprintf(ch,"%.6lf",dd.DH);
str=ch;
(GetDlgItem(IDC_EDITCH))->SetWindowText(str);
}
else
{
CXYH cc;
wps[pWptList->GetCurSel()].GetC(cc);
memset(ch,0,20);
sprintf(ch,"%.6lf",cc.CX);
str=ch;
(GetDlgItem(IDC_EDITCX))->SetWindowText(str);
memset(ch,0,20);
sprintf(ch,"%.6lf",cc.CY);
str=ch;
(GetDlgItem(IDC_EDITCY))->SetWindowText(str);
memset(ch,0,20);
sprintf(ch,"%.6lf",cc.CH);
str=ch;
(GetDlgItem(IDC_EDITCH))->SetWindowText(str);
}
}
void CWptDlg::OnSelchangeList()
{
CListBox *pWptList=(CListBox *)GetDlgItem(IDC_LIST);
CArray<CWayPoint,CWayPoint> &wps=pDoc->m_Way.GetWpts();
CString str="";
if(pWptList->GetCurSel()==LB_ERR)
{
return;
}
unsigned short lp[20];
char ch[20];
wps[pWptList->GetCurSel()].GetPointName(lp);
(GetDlgItem(IDC_EDITNAME))->SetWindowText(lp);
if(nBisis==0)
{
DBLH dd;
wps[pWptList->GetCurSel()].GetD(dd);
memset(ch,0,20);
sprintf(ch,"%.6lf",Rad2Dms(dd.DB));
str=ch;
(GetDlgItem(IDC_EDITCX))->SetWindowText(str);
memset(ch,0,20);
sprintf(ch,"%.6lf",Rad2Dms(dd.DL));
str=ch;
(GetDlgItem(IDC_EDITCY))->SetWindowText(str);
memset(ch,0,20);
sprintf(ch,"%.6lf",dd.DH);
str=ch;
(GetDlgItem(IDC_EDITCH))->SetWindowText(str);
}
else
{
CXYH cc;
wps[pWptList->GetCurSel()].GetC(cc);
memset(ch,0,20);
sprintf(ch,"%.6lf",cc.CX);
str=ch;
(GetDlgItem(IDC_EDITCX))->SetWindowText(str);
memset(ch,0,20);
sprintf(ch,"%.6lf",cc.CY);
str=ch;
(GetDlgItem(IDC_EDITCY))->SetWindowText(str);
memset(ch,0,20);
sprintf(ch,"%.6lf",cc.CH);
str=ch;
(GetDlgItem(IDC_EDITCH))->SetWindowText(str);
}
}
void CWptDlg::OnSelchangeBisis()
{
CComboBox *pBisis=(CComboBox *)GetDlgItem(IDC_BISIS);
if(nBisis==pBisis->GetCurSel())
{
return;
}
nBisis=pBisis->GetCurSel();
CString str;
switch(nBisis)
{
case 0:
str=_T("B:");
(GetDlgItem(IDC_STATICCX))->SetWindowText(str);
str=_T("L:");
(GetDlgItem(IDC_STATICCY))->SetWindowText(str);
str=_T("H:");
(GetDlgItem(IDC_STATICCH))->SetWindowText(str);
(GetDlgItem(IDC_EDITNAME))->EnableWindow(TRUE);
((CEdit*)(GetDlgItem(IDC_EDITCX)))->SetReadOnly(FALSE);
((CEdit*)(GetDlgItem(IDC_EDITCY)))->SetReadOnly(FALSE);
((CEdit*)(GetDlgItem(IDC_EDITCH)))->SetReadOnly(FALSE);
(GetDlgItem(IDC_ADD))->EnableWindow(TRUE);
(GetDlgItem(IDC_INSERT))->EnableWindow(TRUE);
(GetDlgItem(IDC_UPDATE))->EnableWindow(TRUE);
break;
case 1:
str=_T("X:");
(GetDlgItem(IDC_STATICCX))->SetWindowText(str);
str=_T("Y:");
(GetDlgItem(IDC_STATICCY))->SetWindowText(str);
str=_T("H:");
(GetDlgItem(IDC_EDITNAME))->EnableWindow(FALSE);
((CEdit*)(GetDlgItem(IDC_EDITCX)))->SetReadOnly();
((CEdit*)(GetDlgItem(IDC_EDITCY)))->SetReadOnly();
((CEdit*)(GetDlgItem(IDC_EDITCH)))->SetReadOnly();
(GetDlgItem(IDC_ADD))->EnableWindow(FALSE);
(GetDlgItem(IDC_INSERT))->EnableWindow(FALSE);
(GetDlgItem(IDC_UPDATE))->EnableWindow(FALSE);
break;
}
(GetDlgItem(IDC_EDITNAME))->SetWindowText(_T(""));
(GetDlgItem(IDC_EDITCX))->SetWindowText(_T(""));
(GetDlgItem(IDC_EDITCY))->SetWindowText(_T(""));
(GetDlgItem(IDC_EDITCH))->SetWindowText(_T(""));
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -