📄 initdlg.cpp
字号:
// initDlg.cpp : implementation file
//
#include "stdafx.h"
#include "VcDemo.h"
#include "initDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// initDlg dialog
initDlg::initDlg(CWnd* pParent /*=NULL*/)
: CDialog(initDlg::IDD, pParent)
{
m_pView = NULL;
}
void initDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(initDlg)
DDX_Control(pDX, IDC_EdtAMR1, m_edtAMR1);
DDX_Control(pDX, IDC_EdtAMR0, m_edtAMR0);
DDX_Control(pDX, IDC_EdtACR1, m_edtACR1);
DDX_Control(pDX, IDC_EdtACR0, m_edtACR0);
DDX_Text(pDX, IDC_EdtACR0, m_ACR0);
DDV_MaxChars(pDX, m_ACR0, 2);
DDX_Text(pDX, IDC_EdtACR1, m_ACR1);
DDV_MaxChars(pDX, m_ACR1, 2);
DDX_Text(pDX, IDC_EdtACR2, m_ACR2);
DDV_MaxChars(pDX, m_ACR2, 2);
DDX_Text(pDX, IDC_EdtACR3, m_ACR3);
DDV_MaxChars(pDX, m_ACR3, 2);
DDX_Text(pDX, IDC_EdtAMR0, m_AMR0);
DDV_MaxChars(pDX, m_AMR0, 2);
DDX_Text(pDX, IDC_EdtAMR1, m_AMR1);
DDV_MaxChars(pDX, m_AMR1, 2);
DDX_Text(pDX, IDC_EdtAMR2, m_AMR2);
DDV_MaxChars(pDX, m_AMR2, 2);
DDX_Text(pDX, IDC_EdtAMR3, m_AMR3);
DDV_MaxChars(pDX, m_AMR3, 2);
DDX_Check(pDX, IDC_ChkIRQRec, m_ChkIRQRec);
DDX_Check(pDX, IDC_CHECK4, m_Check4);
DDX_Check(pDX, IDC_CHECK3, m_Check3);
DDX_Check(pDX, IDC_CHECK2, m_Check2);
DDX_CBString(pDX, IDC_CmbFrame, m_strFrame);
DDX_CBString(pDX, IDC_CmbFilter, m_strFilter);
DDX_CBString(pDX, IDC_CmbBaudrate, m_strBaudrate);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(initDlg, CDialog)
//{{AFX_MSG_MAP(initDlg)
ON_BN_CLICKED(IDC_BtnOk, OnBtnOk)
ON_BN_CLICKED(IDC_BtnCancel, OnBtnCancel)
ON_CBN_SELCHANGE(IDC_CmbFrame, OnSelchangeCmbFrame)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
initDlg::initDlg(CView* pView)
: CDialog(initDlg::IDD) // modeless constructor
// modeless constructor
{
//{{AFX_DATA_INIT(initDlg)
m_ACR0 = _T("");
m_ACR1 = _T("");
m_ACR2 = _T("");
m_ACR3 = _T("");
m_AMR0 = _T("");
m_AMR1 = _T("");
m_AMR2 = _T("");
m_AMR3 = _T("");
m_ChkIRQRec = FALSE;
m_Check4 = FALSE;
m_Check3 = FALSE;
m_Check2 = FALSE;
m_strFrame = _T("");
m_strFilter = _T("");
m_strBaudrate = _T("");
//}}AFX_DATA_INIT
m_pView = pView;
}
// class initialize
BOOL initDlg::OnInitDialog()
{
// Frame Type
CComboBox* pLX;
pLX = (CComboBox*) GetDlgItem(IDC_CmbFrame);
pLX->InsertString(-1,"标准帧");
pLX->InsertString(-1, "扩展帧");
m_strFrame = "标准帧";
// Baudrate
pLX = (CComboBox*) GetDlgItem(IDC_CmbBaudrate);
pLX->InsertString(-1,"5K");
pLX->InsertString(-1,"10K");
pLX->InsertString(-1,"20K");
pLX->InsertString(-1,"40K");
pLX->InsertString(-1,"50K");
pLX->InsertString(-1,"80K");
pLX->InsertString(-1,"100K");
pLX->InsertString(-1,"125K");
pLX->InsertString(-1,"250K");
pLX->InsertString(-1,"500K");
pLX->InsertString(-1,"1000K");
m_strBaudrate = "5K";
// filter type
pLX = (CComboBox*) GetDlgItem(IDC_CmbFilter);
pLX->InsertString(-1,"单滤波");
pLX->InsertString(-1,"双滤波");
m_strFilter = "单滤波";
CEdit* pLY;
m_ACR0 = "00";
m_ACR1 = "00";
m_ACR2 = "00";
m_ACR3 = "00";
// hide low two ACR
pLY = (CEdit*)GetDlgItem(IDC_EdtACR0);
pLY->ShowWindow(SW_HIDE);
pLY = (CEdit*)GetDlgItem(IDC_EdtACR1);
pLY->ShowWindow(SW_HIDE);
m_AMR0 = "ff";
m_AMR1 = "ff";
m_AMR2 = "ff";
m_AMR3 = "ff";
// hide low two AMR
pLY = (CEdit*)GetDlgItem(IDC_EdtAMR0);
pLY->ShowWindow(SW_HIDE);
pLY = (CEdit*)GetDlgItem(IDC_EdtAMR1);
pLY->ShowWindow(SW_HIDE);
m_ChkIRQRec = TRUE;
m_Check2 = TRUE;
m_Check3 = TRUE;
m_Check4 = TRUE;
// default: standard frame
m_workMode = 0x0;
// Call after initialization
return CDialog::OnInitDialog(); // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void initDlg::OnSelchangeCmbFrame()
{
// TODO: Add your control notification handler code here
// work mode
CComboBox* pLX;
pLX = (CComboBox*) GetDlgItem(IDC_CmbFrame);
// set ACR and AMR
CEdit* pLY;
if(pLX->GetCurSel())
{
// Extend Frame
// show low two ACR
pLY = (CEdit*)GetDlgItem(IDC_EdtACR0);
pLY->ShowWindow(SW_SHOW);
pLY = (CEdit*)GetDlgItem(IDC_EdtACR1);
pLY->ShowWindow(SW_SHOW);
// show low two AMR
pLY = (CEdit*)GetDlgItem(IDC_EdtAMR0);
pLY->ShowWindow(SW_SHOW);
pLY = (CEdit*)GetDlgItem(IDC_EdtAMR1);
pLY->ShowWindow(SW_SHOW);
}
else
{
// Standard Frame
// hide low two ACR
pLY = (CEdit*)GetDlgItem(IDC_EdtACR0);
pLY->ShowWindow(SW_HIDE);
pLY = (CEdit*)GetDlgItem(IDC_EdtACR1);
pLY->ShowWindow(SW_HIDE);
// hide low two AMR
pLY = (CEdit*)GetDlgItem(IDC_EdtAMR0);
pLY->ShowWindow(SW_HIDE);
pLY = (CEdit*)GetDlgItem(IDC_EdtAMR1);
pLY->ShowWindow(SW_HIDE);
}
}
/////////////////////////////////////////////////////////////////////////////
void initDlg::OnBtnOk()
{
// TODO: Add your control notification handler code here
unsigned char baudrate[11*2] = {0x3f,0xff, //5k
0x1f,0xff, //10k
0x0f,0xff, //20k
0x07,0xff, //40k
0x07,0x2f, //50k
0x03,0xff, //80k
0x03,0x2f, //100k
0x03,0x1c, //125k
0x01,0x1c, //250k
0x00,0x1c, //500k
0x00,0x14 //1000k
};
unsigned int baudIndex;
unsigned int retVal;
unsigned long ACR,AMR;
UpdateData(TRUE);
ptrStruct.card = 0x0;
ptrStruct.channel = 0x0;
// work mode
CComboBox* pLX;
pLX = (CComboBox*) GetDlgItem(IDC_CmbFrame);
// set ACR and AMR
if(pLX->GetCurSel())
{
ptrConfig.workMode = 0x1;
ACR = (StringToInt(m_ACR3) * 256 * 256 * 256 + StringToInt(m_ACR2) * 256 * 256
+ StringToInt(m_ACR1) * 256 + StringToInt(m_ACR0))/8;
AMR = (StringToInt(m_AMR3) * 256 * 256 * 256 + StringToInt(m_AMR2) * 256 * 256
+ StringToInt(m_AMR1) * 256 + StringToInt(m_AMR0))/8;
//AMR = 0xffffffff;
ptrConfig.accCode = ACR;
ptrConfig.accMask = AMR;
// Extend frame
m_workMode = 0x01;
}
else
{
ptrConfig.workMode = 0x0;
ACR = (StringToInt(m_ACR3) * 256 + StringToInt(m_ACR2))/32;
AMR = (StringToInt(m_AMR3) * 256 + StringToInt(m_AMR2))/32;
//AMR = 0xffffffff;
ptrConfig.accCode = ACR;
ptrConfig.accMask = AMR;
// stand frame
m_workMode = 0x0;
}
// filter mode
pLX = (CComboBox*) GetDlgItem(IDC_CmbFilter);
if(pLX->GetCurSel())
{
ptrConfig.filterMode = 0x1;
}
else
{
ptrConfig.filterMode = 0x0;
}
// baudrate
pLX = (CComboBox*) GetDlgItem(IDC_CmbBaudrate);
baudIndex = pLX->GetCurSel();
if(baudIndex >= 0)
{
ptrConfig.timer0 = baudrate[baudIndex*2 + 0];
ptrConfig.timer1 = baudrate[baudIndex*2 + 1];
}
// Interrupt
if(m_ChkIRQRec)
{
ptrConfig.control = 0x01;
}
else
{
ptrConfig.control = 0x0;
}
// 初始化通道1
retVal = CAN_Init(&ptrStruct,&ptrConfig);
if((m_pView != NULL)&&(retVal > 0))
{
// modeless case -- do not call base class OnCancel
m_pView->PostMessage(WM_INIT, IDCANCEL);
}
else
{
CDialog::OnCancel(); // modal case
}
CDialog::OnOK();
}
void initDlg::OnBtnCancel()
{
// TODO: Add your control notification handler code here
CDialog::OnCancel(); // modal case
}
unsigned long initDlg::multi(unsigned int x,unsigned int y)
{
unsigned int loopX;
if(y == 0)
{
return 1;
}
if(y == 1)
{
return x;
}
for(loopX = 1; loopX < y; loopX++)
{
x = x*x;
}
return x;
}
unsigned long initDlg::StringToInt( CString xx)
{
int loopX;
unsigned long temp = 0;
unsigned char ascnum;
for(loopX = 0; loopX < xx.GetLength(); loopX++)
{
ascnum = xx.GetAt(loopX);
if((ascnum >= 0x30) && (ascnum <= 0x39))
{
temp = temp + (ascnum - 0x30) * multi(16,(xx.GetLength() - loopX-1));
}
else if((ascnum >= 0x41) && (ascnum <= 0x46))
{
temp = temp + (10 + (ascnum - 0x41)) * multi(16,(xx.GetLength() - loopX-1));
}
else if((ascnum >= 0x61) && (ascnum <= 0x66))
{
temp = temp + (10 + (ascnum - 0x61)) * multi(16,(xx.GetLength() - loopX-1));
}
}
return temp;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -