代码如下(很奇怪m_MSComm已经声明了,编译没错误,执行OnStart()的红色代码就有错误。):
#include "mscomm.h"CMSComm m_MSComm;
CString m_strBaudRate;
CComboBox m_COMPort;
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif/////////////////////////////////////////////////////////////////////////////
// CWeightDlg dialog
CWeightDlg::CWeightDlg(CWnd* pParent /*=NULL*/)
: CDialog(CWeightDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CWeightDlg)
m_strBaudRate = _T("9600");
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
}
void CWeightDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CWeightDlg)
DDX_Control(pDX, IDC_ADODC3, m_Adodc);
// DDX_Control(pDX, IDC_DATAGRID6, m_Datagrid1);
DDX_Control(pDX, IDC_DATAGRID4, m_Datagrid);
DDX_Text(pDX, IDC_BAUDRATE, m_strBaudRate);
DDX_Control(pDX, IDC_COMPORT, m_COMPort);
// DDX_Control(pDX, IDC_ADODC4, m_Adodc1);
// NOTE: the ClassWizard will add DDX and DDV calls here
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CWeightDlg, CDialog)
//{{AFX_MSG_MAP(CWeightDlg)
ON_BN_CLICKED(IDC_BUTTON12, OnQueryMainMaterial)
ON_BN_CLICKED(IDC_BUTTON2, OnStart)
ON_BN_CLICKED(IDC_BUTTON4, OnClose)// ON_EVENT(CWeightDlg, IDC_MSCOMM1, 1 /* OnComm */, OnComm, VTS_NONE)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()void CWeightDlg::OnStart()
{
// TODO: Add your control notification handler code here UpdateData(TRUE); switch(m_COMPort.GetCurSel())//选择串口号
{
case 0:
m_MSComm.SetCommPort(1); //选择COM1 break;
case 1:
m_MSComm.SetCommPort(2); //选择COM2 break;
case 2:
m_MSComm.SetCommPort(3); //选择COM3
break;
case 3:
m_MSComm.SetCommPort(4); //选择COM4 break;
default:
break;
}
GetDlgItem(IDC_COMPORT)->EnableWindow(FALSE); m_BaudRate = m_strBaudRate+",N,7,1"; //拼接波特率字 GetDlgItem(IDC_BAUDRATE)->EnableWindow(FALSE);
m_MSComm.SetInBufferSize(512); //接收缓冲区
m_MSComm.SetOutBufferSize(128);//发送缓冲区
m_MSComm.SetInputLen(0);//设置当前接收区数据长度为25字节
m_MSComm.SetInputMode(1);//以二进制方式读写数据
m_MSComm.SetRThreshold(1);//当接收缓冲区有25个字节时,将触发OnComm的消息2
m_MSComm.SetSettings(m_BaudRate);//设置波特率xxxx,无校验,8个数据位,1个停止位
if(!m_MSComm.GetPortOpen())//如果串口没有打开则打开
{
m_MSComm.SetPortOpen(TRUE);//打开串口
GetDlgItem(IDC_BUTTON2)->EnableWindow(FALSE); //开始按钮变灰 }
else
AfxMessageBox("打开串口失败\n请检查设置"); m_MSComm.GetInput(); //先预读缓冲区以清除残留数据}
#include "mscomm.h"CMSComm m_MSComm;
CString m_strBaudRate;
CComboBox m_COMPort;
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif/////////////////////////////////////////////////////////////////////////////
// CWeightDlg dialog
CWeightDlg::CWeightDlg(CWnd* pParent /*=NULL*/)
: CDialog(CWeightDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CWeightDlg)
m_strBaudRate = _T("9600");
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
}
void CWeightDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CWeightDlg)
DDX_Control(pDX, IDC_ADODC3, m_Adodc);
// DDX_Control(pDX, IDC_DATAGRID6, m_Datagrid1);
DDX_Control(pDX, IDC_DATAGRID4, m_Datagrid);
DDX_Text(pDX, IDC_BAUDRATE, m_strBaudRate);
DDX_Control(pDX, IDC_COMPORT, m_COMPort);
// DDX_Control(pDX, IDC_ADODC4, m_Adodc1);
// NOTE: the ClassWizard will add DDX and DDV calls here
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CWeightDlg, CDialog)
//{{AFX_MSG_MAP(CWeightDlg)
ON_BN_CLICKED(IDC_BUTTON12, OnQueryMainMaterial)
ON_BN_CLICKED(IDC_BUTTON2, OnStart)
ON_BN_CLICKED(IDC_BUTTON4, OnClose)// ON_EVENT(CWeightDlg, IDC_MSCOMM1, 1 /* OnComm */, OnComm, VTS_NONE)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()void CWeightDlg::OnStart()
{
// TODO: Add your control notification handler code here UpdateData(TRUE); switch(m_COMPort.GetCurSel())//选择串口号
{
case 0:
m_MSComm.SetCommPort(1); //选择COM1 break;
case 1:
m_MSComm.SetCommPort(2); //选择COM2 break;
case 2:
m_MSComm.SetCommPort(3); //选择COM3
break;
case 3:
m_MSComm.SetCommPort(4); //选择COM4 break;
default:
break;
}
GetDlgItem(IDC_COMPORT)->EnableWindow(FALSE); m_BaudRate = m_strBaudRate+",N,7,1"; //拼接波特率字 GetDlgItem(IDC_BAUDRATE)->EnableWindow(FALSE);
m_MSComm.SetInBufferSize(512); //接收缓冲区
m_MSComm.SetOutBufferSize(128);//发送缓冲区
m_MSComm.SetInputLen(0);//设置当前接收区数据长度为25字节
m_MSComm.SetInputMode(1);//以二进制方式读写数据
m_MSComm.SetRThreshold(1);//当接收缓冲区有25个字节时,将触发OnComm的消息2
m_MSComm.SetSettings(m_BaudRate);//设置波特率xxxx,无校验,8个数据位,1个停止位
if(!m_MSComm.GetPortOpen())//如果串口没有打开则打开
{
m_MSComm.SetPortOpen(TRUE);//打开串口
GetDlgItem(IDC_BUTTON2)->EnableWindow(FALSE); //开始按钮变灰 }
else
AfxMessageBox("打开串口失败\n请检查设置"); m_MSComm.GetInput(); //先预读缓冲区以清除残留数据}
解决方案 »
- color_3dface+1,为什么要加一?
- 最小化时隐藏对话框,为什么一定要放在OnSysCommand里面?还有一件怪事。。。。。。
- 线程插入,请教
- 请问!怎么得到一文件是否存在?
- 设断点调试就直接进入汇编模式了,怎么回事?
- 关于菜单操作的基础问题
- 弱弱地问
- 用MFC开发AcitveX控件默认生成一矩形界面如何修改
- 在线等待中问题,一定给分:CreateProcess的参数STARTUPINFO结构中,HANDLE hStdInput在什么时候用?
- VC中,宏定义能否单独作为一行代码?
- 请问从COM方法返回的接口是继承自IUnknown的会不会有问题?
- 请问,怎么创建和Formail样式的工具栏,我试了自绘,要处理的太多了
DDX_Control(pDX, IDC_MSCOMM1, m_MSComm);
没有和控件绑定,用Class Wizard给空间关联变量。