⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 wptdlg.cpp

📁 程序实现了PDA对手持型GPS的导航设计。用一个串口类控制串口通讯
💻 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 + -