📄 rcdlg.cpp
字号:
// RCDLG.cpp : implementation file
//
#include "stdafx.h"
#include "小车控制程序.h"
#include "RCDLG.h"
#include "PictureEx.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CRCDLG dialog
CRCDLG::CRCDLG(CWnd* pParent /*=NULL*/)
: CDialog(CRCDLG::IDD, pParent)
{
//{{AFX_DATA_INIT(CRCDLG)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
}
void CRCDLG::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CRCDLG)
DDX_Control(pDX, IDC_PROGRESS1, m_progress);
DDX_Control(pDX, IDC_GIF_RC, m_gif_rc);
DDX_Control(pDX, IDCANCEL, m_exit_button);
DDX_Control(pDX, IDOK, m_ok_button);
DDX_Control(pDX, IDC_MSCOMM1, m_rc_com);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CRCDLG, CDialog)
//{{AFX_MSG_MAP(CRCDLG)
ON_WM_KEYDOWN()
ON_WM_KEYUP()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CRCDLG message handlers
void CRCDLG::OnCancel()
{
// TODO: Add extra cleanup here
CDialog::OnCancel();
}
void CRCDLG::OnOK()
{
// TODO: Add extra validation here
MessageBox("用键盘控制控制小车");
OPEN_RC_COM();
m_ok_button.EnableWindow(false);
m_exit_button.SetFocus();
if (m_gif_rc.Load(MAKEINTRESOURCE(IDR_GIF1),_T("Gif")))
m_gif_rc.Draw();
//CDialog::OnOK();
}
BEGIN_EVENTSINK_MAP(CRCDLG, CDialog)
//{{AFX_EVENTSINK_MAP(CRCDLG)
ON_EVENT(CRCDLG, IDC_MSCOMM1, 1 /* OnComm */, OnOnCommMscomm1, VTS_NONE)
//}}AFX_EVENTSINK_MAP
END_EVENTSINK_MAP()
void CRCDLG::OnOnCommMscomm1()
{
// TODO: Add your control notification handler code here
}
BOOL CRCDLG::OnInitDialog()
{
CDialog::OnInitDialog();
m_progress.SetPos(0);
m_progress.SetRange(0,50);
m_progress.SetStep(10);
step=0;
if (m_gif_rc.Load(MAKEINTRESOURCE(IDR_GIF_02),_T("Gif")))
m_gif_rc.Draw();
send_data1[0]='#';
send_data1[1]='r';
send_data1[2]='c';
send_data1[4]='*';
// TODO: Add extra initialization here
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
BOOL CRCDLG::PreTranslateMessage(LPMSG lpmsg)
{
BOOL bHandleNow = FALSE;
switch (lpmsg->message)
{
case WM_KEYDOWN:
switch (lpmsg->wParam)
{
case VK_UP:
case VK_DOWN:
case VK_LEFT:
case VK_RIGHT:
case VK_SPACE:
bHandleNow = TRUE;
break;
}
if (bHandleNow)
OnKeyDown(lpmsg->wParam, LOWORD(lpmsg ->lParam), HIWORD(lpmsg->lParam));
break;
case WM_KEYUP:
switch (lpmsg->wParam)
{
case VK_UP:
case VK_DOWN:
case VK_LEFT:
case VK_RIGHT:
case VK_SPACE:
bHandleNow = TRUE;
break;
}
if (bHandleNow)
OnKeyUp(lpmsg->wParam, LOWORD(lpmsg ->lParam), HIWORD(lpmsg->lParam));
break;
}
return bHandleNow;
//return CDialog::PreTranslateMessage(pMsg);
}
void CRCDLG::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
// TODO: Add your message handler code here and/or call default
int i;
if (nChar==VK_UP) //启动小车前进
{
if (up_pressed==0)
{
if (m_gif_rc.Load(MAKEINTRESOURCE(IDR_GIF_UP),_T("Gif")))
m_gif_rc.Draw();
m_progress.StepIt();
up_pressed=1;
send_data1[3]='1';
CByteArray send;
send.RemoveAll();
send.SetSize(5);
for(i = 0; i <5; i++)
send.SetAt(i, send_data1[i]);
m_rc_com.SetOutput(COleVariant(send));
}
}
if (nChar==VK_DOWN) //启动小车后退
{
if (down_pressed==0)
{
if (m_gif_rc.Load(MAKEINTRESOURCE(IDR_GIF_DOWN),_T("Gif")))
m_gif_rc.Draw();
m_progress.StepIt();
down_pressed=1;
send_data1[3]='2';
CByteArray send;
send.RemoveAll();
send.SetSize(5);
for(i = 0; i <5; i++)
send.SetAt(i, send_data1[i]);
m_rc_com.SetOutput(COleVariant(send));
}
}
if (nChar==VK_LEFT)
{
if (up_pressed==0 && down_pressed==0) //小车原地左转
{
if (m_gif_rc.Load(MAKEINTRESOURCE(IDR_GIF_LEFT_ROVE),_T("Gif")))
m_gif_rc.Draw();
m_progress.SetPos(20);
send_data1[3]='7';
CByteArray send;
send.RemoveAll();
send.SetSize(5);
for(i = 0; i <5; i++)
send.SetAt(i, send_data1[i]);
m_rc_com.SetOutput(COleVariant(send));
}
if (up_pressed==1) //小车左转
{
if (m_gif_rc.Load(MAKEINTRESOURCE(IDR_GIF_LEFT),_T("Gif")))
m_gif_rc.Draw();
send_data1[3]='3';
CByteArray send;
send.RemoveAll();
send.SetSize(5);
for(i = 0; i <5; i++)
send.SetAt(i, send_data1[i]);
m_rc_com.SetOutput(COleVariant(send));
}
if (down_pressed==1) //小车后左转
{
if (m_gif_rc.Load(MAKEINTRESOURCE(IDR_GIF_DOWN_LEFT),_T("Gif")))
m_gif_rc.Draw();
send_data1[3]='5';
CByteArray send;
send.RemoveAll();
send.SetSize(5);
for(i = 0; i <5; i++)
send.SetAt(i, send_data1[i]);
m_rc_com.SetOutput(COleVariant(send));
}
}
if (nChar==VK_RIGHT)
{
if (up_pressed==0 && down_pressed==0) //小车原地右转
{
if (m_gif_rc.Load(MAKEINTRESOURCE(IDR_GIF_RITHT_ROV),_T("Gif")))
m_gif_rc.Draw();
m_progress.SetPos(20);
send_data1[3]='8';
CByteArray send;
send.RemoveAll();
send.SetSize(5);
for(i = 0; i <5; i++)
send.SetAt(i, send_data1[i]);
m_rc_com.SetOutput(COleVariant(send));
}
if (up_pressed==1) //小车右转
{
if (m_gif_rc.Load(MAKEINTRESOURCE(IDR_GIF_RIGHT),_T("Gif")))
m_gif_rc.Draw();
send_data1[3]='4';
CByteArray send;
send.RemoveAll();
send.SetSize(5);
for(i = 0; i <5; i++)
send.SetAt(i, send_data1[i]);
m_rc_com.SetOutput(COleVariant(send));
}
if (down_pressed==1) //小车后右转
{
if (m_gif_rc.Load(MAKEINTRESOURCE(IDR_GIF_DOWN_RIGHT),_T("Gif")))
m_gif_rc.Draw();
send_data1[3]='6';
CByteArray send;
send.RemoveAll();
send.SetSize(5);
for(i = 0; i <5; i++)
send.SetAt(i, send_data1[i]);
m_rc_com.SetOutput(COleVariant(send));
}
}
if (nChar==VK_SPACE)
{
}
CDialog::OnKeyDown(nChar, nRepCnt, nFlags);
}
void CRCDLG::OnKeyUp(UINT nChar, UINT nRepCnt, UINT nFlags)
{
// TODO: Add your message handler code here and/or call default
int i;
if (nChar==VK_UP || nChar==VK_DOWN) //停止小车
{
if (m_gif_rc.Load(MAKEINTRESOURCE(IDR_GIF_STOP),_T("Gif")))
m_gif_rc.Draw();
m_progress.SetPos(0);
step=0;
up_pressed=0;
down_pressed=0;
send_data1[3]='0';
CByteArray send;
send.RemoveAll();
send.SetSize(5);
for(i = 0; i <5; i++)
send.SetAt(i, send_data1[i]);
m_rc_com.SetOutput(COleVariant(send));
}
if (nChar==VK_LEFT || nChar==VK_RIGHT)
{
if (up_pressed==0 && down_pressed==0) //停止小车
{
if (m_gif_rc.Load(MAKEINTRESOURCE(IDR_GIF_STOP),_T("Gif")))
m_gif_rc.Draw();
m_progress.SetPos(0);
step=0;
send_data1[3]='0';
CByteArray send;
send.RemoveAll();
send.SetSize(5);
for(i = 0; i <5; i++)
send.SetAt(i, send_data1[i]);
m_rc_com.SetOutput(COleVariant(send));
}
if (up_pressed==1 ) //小车继续前进
{
if (m_gif_rc.Load(MAKEINTRESOURCE(IDR_GIF_UP),_T("Gif")))
m_gif_rc.Draw();
send_data1[3]='1';
CByteArray send;
send.RemoveAll();
send.SetSize(5);
for(i = 0; i <5; i++)
send.SetAt(i, send_data1[i]);
m_rc_com.SetOutput(COleVariant(send));
}
if (down_pressed==1 ) //小车继续后退
{
if (m_gif_rc.Load(MAKEINTRESOURCE(IDR_GIF_DOWN),_T("Gif")))
m_gif_rc.Draw();
send_data1[3]='2';
CByteArray send;
send.RemoveAll();
send.SetSize(5);
for(i = 0; i <5; i++)
send.SetAt(i, send_data1[i]);
m_rc_com.SetOutput(COleVariant(send));
}
}
if (nChar==VK_SPACE) //小车加速
{
if (step<4 && (up_pressed==1 || down_pressed==1))
{
step++;
m_progress.StepIt();
send_data1[3]='9';
CByteArray send;
send.RemoveAll();
send.SetSize(5);
for(i = 0; i <5; i++)
send.SetAt(i, send_data1[i]);
m_rc_com.SetOutput(COleVariant(send));
}
}
CDialog::OnKeyUp(nChar, nRepCnt, nFlags);
}
void CRCDLG::OPEN_RC_COM()
{
m_rc_com.SetCommPort(2);
//m_com.SetInBufferSize(1024);
//m_com.SetOutBufferCount(512);
if (!m_rc_com.GetPortOpen()) m_rc_com.SetPortOpen(true);
m_rc_com.SetInputMode(1); //设置输入为二进制方式
m_rc_com.SetSettings("9600,n,8,1");
m_rc_com.SetRThreshold(1); //一个字符引发一个事件
m_rc_com.SetInputLen(0);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -