📄 gpssetup.cpp
字号:
#include "stdafx.h"
#include <gps.h>
#include "gpssetup.h"
#ifdef _DEBUG
#undef THIS_FILE
static char BASED_CODE THIS_FILE[] = __FILE__;
#endif
void DDX_CBData(CDataExchange* pDX, int nIDC, DWORD& dwData)
{
HWND hWndCtrl = pDX->PrepareCtrl(nIDC);
if (pDX->m_bSaveAndValidate)
{
int nSelected = ::SendMessage(hWndCtrl, CB_GETCURSEL, 0, 0L);
dwData = ::SendMessage(hWndCtrl, CB_GETITEMDATA, nSelected, 0L);
}
else
{
int nCount = ::SendMessage(hWndCtrl, CB_GETCOUNT, 0, 0L);
for (int i=0; i<nCount; i++)
{
DWORD dwItemData = ::SendMessage(hWndCtrl, CB_GETITEMDATA, i, 0L);
if (dwItemData == dwData)
{
::SendMessage(hWndCtrl, CB_SETCURSEL, i, 0L);
break;
}
}
}
}
void CBAddStringAndData(CWnd* pParent, int nIDC, const CString& sValue, DWORD dwData)
{
HWND hWndCtrl = ::GetDlgItem(pParent->GetSafeHwnd(), nIDC);
int nIndex = ::SendMessage(hWndCtrl, CB_ADDSTRING, 0, (LPARAM) (LPCTSTR) sValue);
::SendMessage(hWndCtrl, CB_SETITEMDATA, nIndex, dwData);
}
IMPLEMENT_DYNCREATE(CGeneralPropertyPage, CPropertyPage)
CGeneralPropertyPage::CGeneralPropertyPage() : CPropertyPage(CGeneralPropertyPage::IDD)
{
//{{AFX_DATA_INIT(CGeneralPropertyPage)
m_bDefault = FALSE;
//}}AFX_DATA_INIT
m_dwStopBits = GpsStopBits1;
m_dwPort = 1;
m_dwParity = GpsParityNone;
m_dwBaudRate = 4800;
m_dwDataBits = 8;
}
CGeneralPropertyPage::~CGeneralPropertyPage()
{
}
void CGeneralPropertyPage::DoDataExchange(CDataExchange* pDX)
{
CPropertyPage::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CGeneralPropertyPage)
DDX_Control(pDX, IDC_STOPBITS, m_ctrlStopBits);
DDX_Control(pDX, IDC_DATABITS, m_ctrlDataBits);
DDX_Control(pDX, IDC_PORT, m_ctrlPort);
DDX_Control(pDX, IDC_PARITY, m_ctrlParity);
DDX_Control(pDX, IDC_BAUDRATE, m_ctrlBaudRate);
DDX_Check(pDX, IDC_DEFAULT, m_bDefault);
//}}AFX_DATA_MAP
DDX_CBData(pDX, IDC_STOPBITS, m_dwStopBits);
DDX_CBData(pDX, IDC_PORT, m_dwPort);
DDX_CBData(pDX, IDC_DATABITS, m_dwDataBits);
DDX_CBData(pDX, IDC_PARITY, m_dwParity);
DDX_CBData(pDX, IDC_BAUDRATE, m_dwBaudRate);
}
BEGIN_MESSAGE_MAP(CGeneralPropertyPage, CPropertyPage)
//{{AFX_MSG_MAP(CGeneralPropertyPage)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
IMPLEMENT_DYNAMIC(CPropertiesPropertySheet, CPropertySheet)
CPropertiesPropertySheet::CPropertiesPropertySheet(UINT nIDCaption, CWnd* pParentWnd, UINT iSelectPage)
:CPropertySheet(nIDCaption, pParentWnd, iSelectPage)
{
AddPage(&m_Page1);
}
CPropertiesPropertySheet::CPropertiesPropertySheet(LPCTSTR pszCaption, CWnd* pParentWnd, UINT iSelectPage)
:CPropertySheet(pszCaption, pParentWnd, iSelectPage)
{
AddPage(&m_Page1);
}
CPropertiesPropertySheet::~CPropertiesPropertySheet()
{
}
BEGIN_MESSAGE_MAP(CPropertiesPropertySheet, CPropertySheet)
//{{AFX_MSG_MAP(CPropertiesPropertySheet)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
BOOL CGeneralPropertyPage::OnInitDialog()
{
//add the strings to the combo boxes
//First the port number combo
for (DWORD i=1; i<=4; i++)
{
CString sPort;
sPort.Format(_T("COM%d"), i);
CBAddStringAndData(this, IDC_PORT, sPort, i);
}
//then the stop bits
CString sStop;
sStop.LoadString(IDS_STOPBIT_1);
CBAddStringAndData(this, IDC_STOPBITS, sStop, GpsStopBits1);
sStop.LoadString(IDS_STOPBIT_1POINT5);
CBAddStringAndData(this, IDC_STOPBITS, sStop, GpsStopBits1Point5);
sStop.LoadString(IDS_STOPBIT_2);
CBAddStringAndData(this, IDC_STOPBITS, sStop, GpsStopBits2);
//then the parity
CString sParity;
sParity.LoadString(IDS_PARITY_EVEN);
CBAddStringAndData(this, IDC_PARITY, sParity, GpsParityEven);
sParity.LoadString(IDS_PARITY_ODD);
CBAddStringAndData(this, IDC_PARITY, sParity, GpsParityOdd);
sParity.LoadString(IDS_PARITY_NONE);
CBAddStringAndData(this, IDC_PARITY, sParity, GpsParityNone);
//then the data bits
CString sDataBits;
sDataBits.Format(_T("%d"), 7);
CBAddStringAndData(this, IDC_DATABITS, sDataBits, 7);
sDataBits.Format(_T("%d"), 8);
CBAddStringAndData(this, IDC_DATABITS, sDataBits, 8);
//then the baud rate
CBAddStringAndData(this, IDC_BAUDRATE, _T("75"), 75);
CBAddStringAndData(this, IDC_BAUDRATE, _T("110"), 110);
CBAddStringAndData(this, IDC_BAUDRATE, _T("134"), 134);
CBAddStringAndData(this, IDC_BAUDRATE, _T("150"), 150);
CBAddStringAndData(this, IDC_BAUDRATE, _T("300"), 300);
CBAddStringAndData(this, IDC_BAUDRATE, _T("600"), 600);
CBAddStringAndData(this, IDC_BAUDRATE, _T("1200"), 1200);
CBAddStringAndData(this, IDC_BAUDRATE, _T("1800"), 1800);
CBAddStringAndData(this, IDC_BAUDRATE, _T("2400"), 2400);
CBAddStringAndData(this, IDC_BAUDRATE, _T("4800"), 4800);
CBAddStringAndData(this, IDC_BAUDRATE, _T("7200"), 7200);
CBAddStringAndData(this, IDC_BAUDRATE, _T("9600"), 9600);
CBAddStringAndData(this, IDC_BAUDRATE, _T("14400"), 14400);
CBAddStringAndData(this, IDC_BAUDRATE, _T("19200"), 19200);
CBAddStringAndData(this, IDC_BAUDRATE, _T("38400"), 38400);
CBAddStringAndData(this, IDC_BAUDRATE, _T("57600"), 57600);
CBAddStringAndData(this, IDC_BAUDRATE, _T("115200"), 115200);
//let the parent do its stuff
CPropertyPage::OnInitDialog();
return TRUE;
}
IMPLEMENT_DYNCREATE(CWizSetupPage1, CPropertyPage)
CWizSetupPage1::CWizSetupPage1() : CPropertyPage(CWizSetupPage1::IDD)
{
//{{AFX_DATA_INIT(CWizSetupPage1)
//}}AFX_DATA_INIT
}
CWizSetupPage1::~CWizSetupPage1()
{
}
void CWizSetupPage1::DoDataExchange(CDataExchange* pDX)
{
CPropertyPage::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CWizSetupPage1)
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CWizSetupPage1, CPropertyPage)
//{{AFX_MSG_MAP(CWizSetupPage1)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
BOOL CWizSetupPage1::OnSetActive()
{
CPropertySheet* pParent = STATIC_DOWNCAST(CPropertySheet, GetParent());
ASSERT(pParent);
pParent->SetWizardButtons(PSWIZB_NEXT);
return CPropertyPage::OnSetActive();
}
IMPLEMENT_DYNCREATE(CWizSetupPage2, CPropertyPage)
CWizSetupPage2::CWizSetupPage2() : CPropertyPage(CWizSetupPage2::IDD)
{
//{{AFX_DATA_INIT(CWizSetupPage2)
//}}AFX_DATA_INIT
m_dwPort = 1;
m_dwBaudRate = 4800;
}
CWizSetupPage2::~CWizSetupPage2()
{
}
void CWizSetupPage2::DoDataExchange(CDataExchange* pDX)
{
CPropertyPage::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CWizSetupPage2)
DDX_Control(pDX, IDC_PORT, m_ctrlPort);
DDX_Control(pDX, IDC_BAUDRATE, m_ctrlBaudRate);
//}}AFX_DATA_MAP
DDX_CBData(pDX, IDC_PORT, m_dwPort);
DDX_CBData(pDX, IDC_BAUDRATE, m_dwBaudRate);
}
BEGIN_MESSAGE_MAP(CWizSetupPage2, CPropertyPage)
//{{AFX_MSG_MAP(CWizSetupPage2)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
BOOL CWizSetupPage2::OnSetActive()
{
CPropertySheet* pParent = STATIC_DOWNCAST(CPropertySheet, GetParent());
ASSERT(pParent);
pParent->SetWizardButtons(PSWIZB_BACK | PSWIZB_NEXT);
return CPropertyPage::OnSetActive();
}
IMPLEMENT_DYNCREATE(CWizSetupPage3, CPropertyPage)
CWizSetupPage3::CWizSetupPage3() : CPropertyPage(CWizSetupPage3::IDD)
{
//{{AFX_DATA_INIT(CWizSetupPage3)
m_nMakeDefault = -1;
m_sName = _T("");
//}}AFX_DATA_INIT
m_nMakeDefault = 0;
}
CWizSetupPage3::~CWizSetupPage3()
{
}
void CWizSetupPage3::DoDataExchange(CDataExchange* pDX)
{
CPropertyPage::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CWizSetupPage3)
DDX_Control(pDX, IDC_NAME, m_ctrlName);
DDX_Radio(pDX, IDC_YESDEFAULT, m_nMakeDefault);
DDX_Text(pDX, IDC_NAME, m_sName);
//}}AFX_DATA_MAP
DDV_MaxChars(pDX, m_sName, GPS_MaxDeviceName);
if (pDX->m_bSaveAndValidate)
{
if (GpsDeviceNameAlreadyExists(m_sName))
{
pDX->PrepareEditCtrl(IDC_NAME);
CString sMsg;
AfxFormatString1(sMsg, IDS_WIZ_NON_UNIQUE_NAME, m_sName);
AfxMessageBox(sMsg);
pDX->Fail();
}
}
}
BEGIN_MESSAGE_MAP(CWizSetupPage3, CPropertyPage)
//{{AFX_MSG_MAP(CWizSetupPage3)
ON_EN_CHANGE(IDC_NAME, OnChangeName)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
BOOL CWizSetupPage3::OnSetActive()
{
//update the wizard buttons
OnChangeName();
return CPropertyPage::OnSetActive();
}
void CWizSetupPage3::OnChangeName()
{
CPropertySheet* pParent = STATIC_DOWNCAST(CPropertySheet, GetParent());
ASSERT(pParent);
int nLength = m_ctrlName.GetWindowTextLength();
if (nLength)
pParent->SetWizardButtons(PSWIZB_BACK | PSWIZB_FINISH);
else
pParent->SetWizardButtons(PSWIZB_BACK | PSWIZB_DISABLEDFINISH);
}
BOOL CWizSetupPage3::OnWizardFinish()
{
if (UpdateData(TRUE))
return CPropertyPage::OnWizardFinish();
else
return FALSE;
}
IMPLEMENT_DYNAMIC(CInstallPropertySheet, CPropertySheet)
CInstallPropertySheet::CInstallPropertySheet(UINT nIDCaption, CWnd* pParentWnd, UINT iSelectPage)
:CPropertySheet(nIDCaption, pParentWnd, iSelectPage)
{
SetWizardMode();
AddPage(&m_Page1);
AddPage(&m_Page2);
AddPage(&m_Page3);
}
CInstallPropertySheet::CInstallPropertySheet(LPCTSTR pszCaption, CWnd* pParentWnd, UINT iSelectPage)
:CPropertySheet(pszCaption, pParentWnd, iSelectPage)
{
SetWizardMode();
AddPage(&m_Page1);
AddPage(&m_Page2);
AddPage(&m_Page3);
}
CInstallPropertySheet::~CInstallPropertySheet()
{
}
BEGIN_MESSAGE_MAP(CInstallPropertySheet, CPropertySheet)
//{{AFX_MSG_MAP(CInstallPropertySheet)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
BOOL CWizSetupPage2::OnInitDialog()
{
//add the strings to the combo boxes
//First the port number combo
for (DWORD i=1; i<=4; i++)
{
CString sPort;
sPort.Format(_T("COM%d"), i);
CBAddStringAndData(this, IDC_PORT, sPort, i);
}
//then the baud rate
CBAddStringAndData(this, IDC_BAUDRATE, _T("75"), 75);
CBAddStringAndData(this, IDC_BAUDRATE, _T("110"), 110);
CBAddStringAndData(this, IDC_BAUDRATE, _T("134"), 134);
CBAddStringAndData(this, IDC_BAUDRATE, _T("150"), 150);
CBAddStringAndData(this, IDC_BAUDRATE, _T("300"), 300);
CBAddStringAndData(this, IDC_BAUDRATE, _T("600"), 600);
CBAddStringAndData(this, IDC_BAUDRATE, _T("1200"), 1200);
CBAddStringAndData(this, IDC_BAUDRATE, _T("1800"), 1800);
CBAddStringAndData(this, IDC_BAUDRATE, _T("2400"), 2400);
CBAddStringAndData(this, IDC_BAUDRATE, _T("4800"), 4800);
CBAddStringAndData(this, IDC_BAUDRATE, _T("7200"), 7200);
CBAddStringAndData(this, IDC_BAUDRATE, _T("9600"), 9600);
CBAddStringAndData(this, IDC_BAUDRATE, _T("14400"), 14400);
CBAddStringAndData(this, IDC_BAUDRATE, _T("19200"), 19200);
CBAddStringAndData(this, IDC_BAUDRATE, _T("38400"), 38400);
CBAddStringAndData(this, IDC_BAUDRATE, _T("57600"), 57600);
CBAddStringAndData(this, IDC_BAUDRATE, _T("115200"), 115200);
//let the parent do its stuff
CPropertyPage::OnInitDialog();
return TRUE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -