📄 selectbattdlg.cpp
字号:
// SelectBattDlg.cpp : implementation file
//
#include "stdafx.h"
#include "BattTest.h"
#include "SelectBattDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CSelectBattDlg dialog
CSelectBattDlg::CSelectBattDlg(CWnd* pParent /*=NULL*/)
: CDialog(CSelectBattDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CSelectBattDlg)
//}}AFX_DATA_INIT
}
void CSelectBattDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CSelectBattDlg)
DDX_Control(pDX, IDC_EMPTYFLASH_BTN, m_btnEmpty);
DDX_Control(pDX, IDC_CONN_BTN, m_btnConn);
DDX_Control(pDX, IDC_HASREADTIME_EDIT, m_wndHasRdTime);
DDX_Control(pDX, IDC_BATTPATH_EDIT, m_wndBattPath);
DDX_Control(pDX, IDC_BATTTYPE_EDIT, m_wndBattType);
DDX_Control(pDX, IDC_READTIME_EDIT, m_wndRdTime);
DDX_Control(pDX, IDC_CLOSE_BTN, m_btnClose);
DDX_Control(pDX, IDC_READTIME_SPIN, m_Spin);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CSelectBattDlg, CDialog)
//{{AFX_MSG_MAP(CSelectBattDlg)
ON_WM_DESTROY()
ON_BN_CLICKED(IDC_CLOSE_BTN, OnClose)
ON_WM_PAINT()
ON_MESSAGE(WM_THREADSYNCDATA, OnRecvMsg)
ON_WM_CTLCOLOR()
ON_NOTIFY(UDN_DELTAPOS, IDC_READTIME_SPIN, OnDeltaposSpin)
ON_EN_CHANGE(IDC_BATTTYPE_EDIT, OnChangeBatttype)
ON_BN_CLICKED(IDC_CONN_BTN, OnConn)
ON_BN_CLICKED(IDC_EMPTYFLASH_BTN, OnEmptyFlash)
ON_WM_TIMER()
ON_BN_CLICKED(IDC_CHGPATH_BTN, OnChgPath)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CSelectBattDlg message handlers
static BOOL g_bInitPort = FALSE;
BOOL CSelectBattDlg::OnInitDialog()
{
CDialog::OnInitDialog();
m_brushBk1.CreateSolidBrush(RGB(150, 150, 155));
m_wndRdTime.SetRange(1, 600);
m_wndRdTime.SetWindowText("180");
this->SetRdTime(0.0f);
m_Spin.SetBase(1);
m_Spin.SetRange(1, 10000); //布数
m_Spin.SetBuddy(&m_wndRdTime);
//
char pstrPath[APPPATHLEN];
::pltCurrentPath(pstrPath, APPPATHLEN);
::memcpy(pstrPath, g_strBattPath + LPCTSTR("\\ABC.dat"), 256);
m_wndBattType.SetWindowText("ABC");
m_wndBattPath.SetWindowText(pstrPath);
m_wndBattType.SetFocus();
///////////////////////////////////////////////////////////////////////////
//初始化通信口
g_bInitPort = g_objCalSerialComm.ConfigPort(3, 500000);
if (!g_bInitPort)
{
CButton *pBtn = (CButton *)GetDlgItem(IDC_CONN_BTN);
pBtn->EnableWindow(FALSE);
pBtn = (CButton *)GetDlgItem(IDC_EMPTYFLASH_BTN);
pBtn->EnableWindow(FALSE);
//
::AfxMessageBox("初始化USB口失败,无法读取数据!");
return FALSE;
}
this->AddOwner(this, this);
g_objCalSerialComm.AcceptConsumer(this);
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void CSelectBattDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // device context for painting
SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
// Center icon in client rectangle
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
// Draw the icon
//dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialog::OnPaint();
}
}
HBRUSH CSelectBattDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
//pDC->SetBkMode(TRANSPARENT);
// switch(nCtlColor)
// {
// case CTLCOLOR_BTN:
// case CTLCOLOR_STATIC:
// break;
// case CTLCOLOR_DLG:
if (pWnd->GetSafeHwnd() == m_btnClose.GetSafeHwnd())
{
pDC->SetTextColor(RGB(0, 0, 0));
hbr = (HBRUSH)m_brushBk1.GetSafeHandle();
}
// break;
// }
return hbr;
}
void CSelectBattDlg::OnDestroy()
{
CDialog::OnDestroy();
//
m_brushBk1.DeleteObject();
}
void CSelectBattDlg::OnDeltaposSpin(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_UPDOWN* pNMUpDown = (NM_UPDOWN*)pNMHDR;
char szBuff[16];
//根据当前位置设定编辑值
CString rString;
m_wndRdTime.GetWindowText(rString);
int CurrentVal = ::atoi((LPCTSTR)rString);
::sprintf(szBuff, "%d", CurrentVal+(pNMUpDown->iPos*1)*pNMUpDown->iDelta);
m_wndRdTime.SetWindowText(szBuff);
*pResult = 0;
}
/////////////////////////////////////////////////////////////////////////////////
//显示电池型号所对应的文件名
void CSelectBattDlg::OnChangeBatttype()
{
CString strType;
m_wndBattType.GetWindowText(strType);
::memcpy(&g_pstrPath[0], g_strBattPath+("\\"+strType+".dat"), 256);
TRACE1("文件名 = %s.\n", g_pstrPath);
m_wndBattPath.SetWindowText(g_pstrPath);
}
//设定已读取得时间
void CSelectBattDlg::SetRdTime(float fRdTime)
{
CString strFmt;
strFmt.Format("%.2f", fRdTime);
m_wndHasRdTime.SetWindowText(strFmt);
}
int CSelectBattDlg::GetRdTime()
{
CString rString;
//
m_wndRdTime.GetWindowText(rString);
return ::atoi(rString);
}
///////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////
//计算出本次的字节数
int CalcSampCapacity(char szRecvBuff[]/*SOC内的顺序*/, int nNumBytes)
{
union sTrf
{
char szTmp[4];
int nVal;
}_pp;
if (nNumBytes != 8)
return -1;
_pp.szTmp[0] = szRecvBuff[4];
_pp.szTmp[1] = szRecvBuff[5];
_pp.szTmp[2] = 0x0;
_pp.szTmp[3] = 0x0;
return _pp.nVal;
}
//上报采集字节数
void RequestSampBytes(CalSpeed_ArgCmdToCom *pCalSpeed_ArgCmdToCom)
{
ASSERT(pCalSpeed_ArgCmdToCom);
//0-清零
ZeroMemory(pCalSpeed_ArgCmdToCom, sizeof(CalSpeed_ArgCmdToCom));
//==1.向MCU发送命令部分===
pCalSpeed_ArgCmdToCom->szCmdBuff[0] = 0x55;
pCalSpeed_ArgCmdToCom->szCmdBuff[1] = 0x55;
pCalSpeed_ArgCmdToCom->szCmdBuff[2] = 0xCC;
pCalSpeed_ArgCmdToCom->szCmdBuff[3] = 0xCC;
pCalSpeed_ArgCmdToCom->nActualLen = 12;
}
//清空Flash闪存
void EraseFlashBytes(CalSpeed_ArgCmdToCom *pCalSpeed_ArgCmdToCom)
{
ASSERT(pCalSpeed_ArgCmdToCom);
//0-清零
ZeroMemory(pCalSpeed_ArgCmdToCom, sizeof(CalSpeed_ArgCmdToCom));
//==1.向MCU发送命令部分===
pCalSpeed_ArgCmdToCom->szCmdBuff[0] = 0x66;
pCalSpeed_ArgCmdToCom->szCmdBuff[1] = 0x66;
pCalSpeed_ArgCmdToCom->szCmdBuff[2] = 0x66;
pCalSpeed_ArgCmdToCom->szCmdBuff[3] = 0x66;
pCalSpeed_ArgCmdToCom->nActualLen = 12;
}
void SwapByte(byte *p1, byte *p2)
{
byte sSwap = *p1;
*p1 = *p2;
*p2 = sSwap;
}
//////////////////////////////////////////////////////////////////////////////
//开始上传多少字节数
//格式为:55 55 55 55 00 00 00 00 00 00 00 00
// |-批数*512-| |-起始地址-|
//批数:0x xx xx 00, 地址:0x xx xx 00
void TsfSendData(CalSpeed_ArgCmdToCom *pCalSpeed_ArgCmdToCom, long nBytesNum)
{
int nActualSize = (nBytesNum+4)*256*2;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -