📄 dialoglpt.cpp
字号:
// dialogLpt.cpp : implementation file
//
#include "stdafx.h"
#include "VcDemo.h"
#include "dialogLpt.h"
#include "initDlg.h"
#include "DataFrame.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
CEvent g_eventStart; // creates autoreset events
/////////////////////////////////////////////////////////////////////////////
// dialogLpt dialog
dialogLpt::dialogLpt(CWnd* pParent /*=NULL*/)
: CDialog(dialogLpt::IDD, pParent)
{
m_pView = NULL;
m_sendNum = 0x0;
bSendOne = 0x0;
}
dialogLpt::dialogLpt(CView* pView)
: CDialog(dialogLpt::IDD) // modeless constructor
{
//{{AFX_DATA_INIT(dialogLpt)
m_intSendNum = 0;
m_intRecNum = 0;
m_intRecLap = 1;
m_intSendLap = 50;
//}}AFX_DATA_INIT
m_sendTimer = 0;
m_recTimer = 0;
m_pView = pView;
// 发送计数
m_sendNum = 0x0;
}
void dialogLpt::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(dialogLpt)
DDX_Control(pDX, IDC_LstRec, m_lstRec);
DDX_Control(pDX, IDC_LstSend, m_lstSend);
DDX_Control(pDX, IDC_OptSendOne, m_optSendOne);
DDX_Control(pDX, IDC_ChkStatus, m_chkStatus);
DDX_Control(pDX, IDC_ChkDisplaySend, m_chkDisplaySend);
DDX_Control(pDX, IDC_ChkDisplayRec, m_chkDisplayRec);
DDX_Control(pDX, IDC_BtnStopSend, m_btnStopSend);
DDX_Control(pDX, IDC_BtnStopRec, m_btnStopRec);
DDX_Control(pDX, IDC_BtnStartSend, m_btnStartSend);
DDX_Control(pDX, IDC_BtnStartRec, m_btnStartRec);
DDX_Control(pDX, IDC_BtnRxBufferCount, m_btnRxBufferCount);
DDX_Control(pDX, IDC_BtnReset, m_btnReset);
DDX_Control(pDX, IDC_BtnRecEnabled, m_btnRecEnabled);
DDX_Control(pDX, IDC_BtnRecDisabled, m_btnRecDisabled);
DDX_Control(pDX, IDC_BtnReadBuffer, m_btnReadBuffer);
DDX_Control(pDX, IDC_BtnPauseSend, m_btnPauseSend);
DDX_Control(pDX, IDC_BtnPauseRec, m_btnPauseRec);
DDX_Control(pDX, IDC_BtnFrame, m_btnFrame);
DDX_Control(pDX, IDC_BtnClearBuffer, m_btnClearBuffer);
DDX_Control(pDX, IDC_Opt1, m_opt1);
DDX_Control(pDX, IDC_Opt2, m_opt2);
DDX_Control(pDX, IDC_Opt3, m_opt3);
DDX_Control(pDX, IDC_Opt4, m_opt4);
DDX_Control(pDX, IDC_Opt5, m_opt5);
DDX_Control(pDX, IDC_Opt6, m_opt6);
DDX_Control(pDX, IDC_Opt7, m_opt7);
DDX_Control(pDX, IDC_Opt8, m_opt8);
DDX_Text(pDX, IDC_EdtSendNum, m_intSendNum);
DDX_Text(pDX, IDC_EdtRecNum, m_intRecNum);
DDX_Text(pDX, IDC_EdtRecLap, m_intRecLap);
DDV_MinMaxInt(pDX, m_intRecLap, 1, 1000);
DDX_Text(pDX, IDC_EdtSendLap, m_intSendLap);
DDV_MinMaxInt(pDX, m_intSendLap, 1, 1000);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(dialogLpt, CDialog)
ON_MESSAGE(WM_RECEIVEDATA, OnReceiveData)
//{{AFX_MSG_MAP(dialogLpt)
ON_BN_CLICKED(IDC_BtnInit, OnBtnInit)
ON_BN_CLICKED(IDC_BtnStartSend, OnBtnStartSend)
ON_BN_CLICKED(IDC_BtnStartRec, OnBtnStartRec)
ON_WM_TIMER()
ON_BN_CLICKED(IDC_BtnFrame, OnBtnFrame)
ON_BN_CLICKED(IDC_BtnStopRec, OnBtnStopRec)
ON_BN_CLICKED(IDC_BtnStopSend, OnBtnStopSend)
ON_BN_CLICKED(IDC_BtnPauseRec, OnBtnPauseRec)
ON_BN_CLICKED(IDC_BtnPauseSend, OnBtnPauseSend)
ON_BN_CLICKED(IDC_ChkStatus, OnChkStatus)
ON_WM_CLOSE()
ON_BN_CLICKED(IDC_BtnReset, OnBtnReset)
ON_BN_CLICKED(IDC_BtnRxBufferCount, OnBtnRxBufferCount)
ON_BN_CLICKED(IDC_BtnClearBuffer, OnBtnClearBuffer)
ON_EN_CHANGE(IDC_EdtSendLap, OnChangeEdtSendLap)
ON_EN_CHANGE(IDC_EdtRecLap, OnChangeEdtRecLap)
ON_BN_CLICKED(IDC_BtnRecEnabled, OnBtnRecEnabled)
ON_BN_CLICKED(IDC_BtnRecDisabled, OnBtnRecDisabled)
ON_BN_CLICKED(IDC_BtnReadBuffer, OnBtnReadBuffer)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
UINT CAN_RECEIVE_DATA(LPVOID pParam)
{
while(1)
{
if(WaitForSingleObject(g_eventStart, 1) == WAIT_OBJECT_0)
{
// Tell owner window we're finished
::PostMessage((HWND) pParam, WM_RECEIVEDATA, 0, 0);
//if (::WaitForSingleObject(g_eventKill, 0) == WAIT_OBJECT_0) {
// break;
}
}
return 0; // ends the thread
}
LRESULT dialogLpt::OnReceiveData(WPARAM wParam, LPARAM lParam)
{
//this->MessageBox("有接收数据...","VCDemo",MB_OK);
dialogLpt::CAN_Rec();
return 0;
}
/////////////////////////////////////////////////////////////////////////////
// dialogLpt message handlers
BOOL dialogLpt::OnInitDialog()
{
CDialog::OnInitDialog();
// TODO: Add extra initialization here
m_btnStopSend.EnableWindow(FALSE);
m_btnStopRec.EnableWindow(FALSE);
m_btnStartSend.EnableWindow(FALSE);
m_btnStartRec.EnableWindow(FALSE);
m_btnRxBufferCount.EnableWindow(FALSE);
m_btnReset.EnableWindow(FALSE);
m_btnRecEnabled.EnableWindow(FALSE);
m_btnRecDisabled.EnableWindow(FALSE);
m_btnReadBuffer.EnableWindow(FALSE);
m_btnPauseSend.EnableWindow(FALSE);
m_btnPauseRec.EnableWindow(FALSE);
m_btnFrame.EnableWindow(FALSE);
m_btnClearBuffer.EnableWindow(FALSE);
// check "Send One" option
m_optSendOne.SetCheck(1);
UpdateData(FALSE);
// default: standard frame
m_workMode = 0x0;
m_bRecPaused = 0x0;
m_bSendPaused = 0x0;
// 启动线程
m_pThread = AfxBeginThread(CAN_RECEIVE_DATA, GetSafeHwnd());
m_pThread->SuspendThread();
// 设置发送帧的格式和内容
m_pDlgDataFrame = new CDataFrame();
return TRUE;// // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void dialogLpt::OnCancel()
{
// TODO: Add extra cleanup here
CDialog::OnCancel();
}
void dialogLpt::OnBtnInit()
{
// TODO: Add your control notification handler code here
// 初始化时调用初始化设定界面
m_pDlgInit = new initDlg(m_pView);
// pass through some variable
m_pDlgInit->ptrStruct.card = 0x0;
m_pDlgInit->DoModal();
// Get WorkMode
m_workMode = m_pDlgInit->m_workMode;
m_pDlgInit = NULL;
}
void dialogLpt::OnBtnFrame()
{
// TODO: Add your control notification handler code here
m_btnStartSend.EnableWindow(TRUE);
m_btnPauseSend.EnableWindow(TRUE);
m_btnStopSend.EnableWindow(TRUE);
m_pDlgDataFrame->m_workMode = m_workMode;
m_pDlgDataFrame->DoModal();
//this->MessageBox(m_pDlgDataFrame->m_strFrame,"Test",MB_OK);
}
void dialogLpt::OnBtnStartRec()
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
m_lstRec.ResetContent();
m_recTimer = SetTimer(20,m_intRecLap,NULL);
/*
// 启动线程
m_pThread->ResumeThread();
// 传递事件
CAN_Intr_Attach((g_eventStart),0x0);
*/
// 已接收数量
m_intRecNum = 0x0;
UpdateData(FALSE);
}
void dialogLpt::OnBtnPauseRec()
{
// TODO: Add your control notification handler code here
KillTimer(m_recTimer);
if(m_bRecPaused)
{
//m_pThread->ResumeThread();
m_bRecPaused = 0x0;
}
else
{
// Stop Thread
//m_pThread->SuspendThread();
m_bRecPaused = 0x01;
}
}
void dialogLpt::OnBtnStopRec()
{
// TODO: Add your control notification handler code here
KillTimer(m_recTimer);
// Stop Thread
//m_pThread->SuspendThread();
}
void dialogLpt::OnBtnStartSend()
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
m_lstSend.ResetContent();
m_sendTimer = SetTimer(10, m_intSendLap,NULL);
// only send once
bSendOne = 0x0;
// 已发送数量
m_intSendNum = 0x0;
UpdateData(FALSE);
}
void dialogLpt::OnBtnPauseSend()
{
// TODO: Add your control notification handler code here
if(m_bSendPaused)
{
m_sendTimer = SetTimer(10, m_intSendLap,NULL);
m_bSendPaused = 0x0;
}
else
{
KillTimer(m_sendTimer);
m_bSendPaused = 0x1;
}
}
void dialogLpt::OnBtnStopSend()
{
// TODO: Add your control notification handler code here
KillTimer(m_sendTimer);
}
void dialogLpt::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
// 发送定时器
if(nIDEvent == 10)
{
if(m_optSendOne.GetCheck() == 1)
{
// already send, then no send
if(!bSendOne)
{
CAN_Send();
}
bSendOne = 1;
}
else
{
CAN_Send();
}
}
// 接收定时器
else if(nIDEvent == 20)
{
CAN_Rec();
}
// 查询状态定时器
else if(nIDEvent == 30)
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -