MFC com控件类

	MFC的串口有两种操作方法,第一种是第三方库,SerialPort类;第二种是activeX控件MScomm控件。本文只介绍ActiveX控件方法。
	activeX控件添加方法:
  1. VSdutio环境下可以直接在资源视图下右键dialog选择添加ActiveX控件。在这里插入图片描述
  2. 打开工具箱->右键->选择项->COM组件,如图添加相应相即可:在这里插入图片描述
    添加控件后为控件后工程会自动添加两个文件:CMscomm.h,CMsconm.cpp, 它是MScomm控件类,使用过程中还需要添加“打开/关闭串口、设置波特率”等方法/函数。

//CMcomm.h

#pragma once

// 计算机生成了由 Microsoft Visual C++ 创建的 IDispatch 包装类

// 注意: 不要修改此文件的内容。如果此类由
//  Microsoft Visual C++ 重新生成,您的修改将被覆盖。

/
// CMscomm1 包装类

class CMscomm1 : public CWnd
{
protected:
    DECLARE_DYNCREATE(CMscomm1)
public:
    CLSID const& GetClsid()
    {
        static CLSID const clsid
            = { 0x648A5600, 0x2C6E, 0x101B, { 0x82, 0xB6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x14 } };
        return clsid;
    }
    virtual BOOL Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle,
                        const RECT& rect, CWnd* pParentWnd, UINT nID, 
                        CCreateContext* pContext = NULL)
    { 
        return CreateControl(GetClsid(), lpszWindowName, dwStyle, rect, pParentWnd, nID); 
    }

    BOOL Create(LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, 
                UINT nID, CFile* pPersist = NULL, BOOL bStorage = FALSE,
                BSTR bstrLicKey = NULL)
    { 
        return CreateControl(GetClsid(), lpszWindowName, dwStyle, rect, pParentWnd, nID,
        pPersist, bStorage, bstrLicKey); 
    }

// 特性
public:
enum
{
    NoHandshaking = 0,
    XonXoff = 1,
    RtsCts = 2,
    XonXoffAndRtsCts = 3
}HandshakingConstants;
enum
{
    comNone = 0,
    comXOnXoff = 1,
    comRTS = 2,
    comRTSXOnXOff = 3
}HandshakeConstants;
enum
{
    comInvalidPropertyValue = 380,
    comGetNotSupported = 394,
    comSetNotSupported = 383,
    comPortInvalid = 8002,
    comPortAlreadyOpen = 8005,
    comPortOpen = 8000,
    comNoOpen = 8012,
    comSetCommStateFailed = 8015,
    comPortNotOpen = 8018,
    comReadError = 8020,
    comDCBError = 8021,
    comBreak = 1001,
    comCTSTO = 1002,
    comDSRTO = 1003,
    comFrame = 1004,
    comOverrun = 1006,
    comCDTO = 1007,
    comRxOver = 1008,
    comRxParity = 1009,
    comTxFull = 1010,
    comDCB = 1011
}ErrorConstants;
enum
{
    comEventBreak = 1001,
    comEventCTSTO = 1002,
    comEventDSRTO = 1003,
    comEventFrame = 1004,
    comEventOverrun = 1006,
    comEventCDTO = 1007,
    comEventRxOver = 1008,
    comEventRxParity = 1009,
    comEventTxFull = 1010,
    comEventDCB = 1011
}CommEventConstants;
enum
{
    comEvSend = 1,
    comEvReceive = 2,
    comEvCTS = 3,
    comEvDSR = 4,
    comEvCD = 5,
    comEvRing = 6,
    comEvEOF = 7
}OnCommConstants;
enum
{
    comInputModeText = 0,
    comInputModeBinary = 1
}InputModeConstants;


// 操作
public:

// IMSComm

// Functions
//

    void put_CDHolding(BOOL newValue)
    {
        static BYTE parms[] = VTS_BOOL ;
        InvokeHelper(0x1, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, newValue);
    }
    BOOL get_CDHolding()
    {
        BOOL result;
        InvokeHelper(0x1, DISPATCH_PROPERTYGET, VT_BOOL, (void*)&result, NULL);
        return result;
    }
    void put_CDTimeout(long newValue)
    {
        static BYTE parms[] = VTS_I4 ;
        InvokeHelper(0x2, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, newValue);
    }
    long get_CDTimeout()
    {
        long result;
        InvokeHelper(0x2, DISPATCH_PROPERTYGET, VT_I4, (void*)&result, NULL);
        return result;
    }
    void put_CommID(long newValue)
    {
        static BYTE parms[] = VTS_I4 ;
        InvokeHelper(0x3, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, newValue);
    }
    long get_CommID()
    {
        long result;
        InvokeHelper(0x3, DISPATCH_PROPERTYGET, VT_I4, (void*)&result, NULL);
        return result;
    }
    void put_CommPort(short newValue)
    {
        static BYTE parms[] = VTS_I2 ;
        InvokeHelper(0x4, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, newValue);
    }
    short get_CommPort()
    {
        short result;
        InvokeHelper(0x4, DISPATCH_PROPERTYGET, VT_I2, (void*)&result, NULL);
        return result;
    }
    void put__CommPort(short newValue)
    {
        static BYTE parms[] = VTS_I2 ;
        InvokeHelper(0x0, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, newValue);
    }
    short get__CommPort()
    {
        short result;
        InvokeHelper(0x0, DISPATCH_PROPERTYGET, VT_I2, (void*)&result, NULL);
        return result;
    }
    void put_CTSHolding(BOOL newValue)
    {
        static BYTE parms[] = VTS_BOOL ;
        InvokeHelper(0x5, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, newValue);
    }
    BOOL get_CTSHolding()
    {
        BOOL result;
        InvokeHelper(0x5, DISPATCH_PROPERTYGET, VT_BOOL, (void*)&result, NULL);
        return result;
    }
    void put_CTSTimeout(long newValue)
    {
        static BYTE parms[] = VTS_I4 ;
        InvokeHelper(0x6, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, newValue);
    }
    long get_CTSTimeout()
    {
        long result;
        InvokeHelper(0x6, DISPATCH_PROPERTYGET, VT_I4, (void*)&result, NULL);
        return result;
    }
    void put_DSRHolding(BOOL newValue)
    {
        static BYTE parms[] = VTS_BOOL ;
        InvokeHelper(0x7, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, newValue);
    }
    BOOL get_DSRHolding()
    {
        BOOL result;
        InvokeHelper(0x7, DISPATCH_PROPERTYGET, VT_BOOL, (void*)&result, NULL);
        return result;
    }
    void put_DSRTimeout(long newValue)
    {
        static BYTE parms[] = VTS_I4 ;
        InvokeHelper(0x8, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, newValue);
    }
    long get_DSRTimeout()
    {
        long result;
        InvokeHelper(0x8, DISPATCH_PROPERTYGET, VT_I4, (void*)&result, NULL);
        return result;
    }
    void put_DTREnable(BOOL newValue)
    {
        static BYTE parms[] = VTS_BOOL ;
        InvokeHelper(0x9, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, newValue);
    }
    BOOL get_DTREnable()
    {
        BOOL result;
        InvokeHelper(0x9, DISPATCH_PROPERTYGET, VT_BOOL, (void*)&result, NULL);
        return result;
    }
    void put_Handshaking(long newValue)
    {
        static BYTE parms[] = VTS_I4 ;
        InvokeHelper(0xa, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, newValue);
    }
    long get_Handshaking()
    {
        long result;
        InvokeHelper(0xa, DISPATCH_PROPERTYGET, VT_I4, (void*)&result, NULL);
        return result;
    }
    void put_InBufferSize(short newValue)
    {
        static BYTE parms[] = VTS_I2 ;
        InvokeHelper(0xb, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, newValue);
    }
    short get_InBufferSize()
    {
        short result;
        InvokeHelper(0xb, DISPATCH_PROPERTYGET, VT_I2, (void*)&result, NULL);
        return result;
    }
    void put_InBufferCount(short newValue)
    {
        static BYTE parms[] = VTS_I2 ;
        InvokeHelper(0xc, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, newValue);
    }
    short get_InBufferCount()
    {
        short result;
        InvokeHelper(0xc, DISPATCH_PROPERTYGET, VT_I2, (void*)&result, NULL);
        return result;
    }
    void put_Break(BOOL newValue)
    {
        static BYTE parms[] = VTS_BOOL ;
        InvokeHelper(0xd, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, newValue);
    }
    BOOL get_Break()
    {
        BOOL result;
        InvokeHelper(0xd, DISPATCH_PROPERTYGET, VT_BOOL, (void*)&result, NULL);
        return result;
    }
    void put_InputLen(short newValue)
    {
        static BYTE parms[] = VTS_I2 ;
        InvokeHelper(0xe, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, newValue);
    }
    short get_InputLen()
    {
        short result;
        InvokeHelper(0xe, DISPATCH_PROPERTYGET, VT_I2, (void*)&result, NULL);
        return result;
    }
    void put_Interval(long newValue)
    {
        static BYTE parms[] = VTS_I4 ;
        InvokeHelper(0xf, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, newValue);
    }
    long get_Interval()
    {
        long result;
        InvokeHelper(0xf, DISPATCH_PROPERTYGET, VT_I4, (void*)&result, NULL);
        return result;
    }
    void put_NullDiscard(BOOL newValue)
    {
        static BYTE parms[] = VTS_BOOL ;
        InvokeHelper(0x10, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, newValue);
    }
    BOOL get_NullDiscard()
    {
        BOOL result;
        InvokeHelper(0x10, DISPATCH_PROPERTYGET, VT_BOOL, (void*)&result, NULL);
        return result;
    }
    void put_OutBufferSize(short newValue)
    {
        static BYTE parms[] = VTS_I2 ;
        InvokeHelper(0x11, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, newValue);
    }
    short get_OutBufferSize()
    {
        short result;
        InvokeHelper(0x11, DISPATCH_PROPERTYGET, VT_I2, (void*)&result, NULL);
        return result;
    }
    void put_OutBufferCount(short newValue)
    {
        static BYTE parms[] = VTS_I2 ;
        InvokeHelper(0x12, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, newValue);
    }
    short get_OutBufferCount()
    {
        short result;
        InvokeHelper(0x12, DISPATCH_PROPERTYGET, VT_I2, (void*)&result, NULL);
        return result;
    }
    void put_ParityReplace(LPCTSTR newValue)
    {
        static BYTE parms[] = VTS_BSTR ;
        InvokeHelper(0x13, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, newValue);
    }
    CString get_ParityReplace()
    {
        CString result;
        InvokeHelper(0x13, DISPATCH_PROPERTYGET, VT_BSTR, (void*)&result, NULL);
        return result;
    }
    void put_PortOpen(BOOL newValue)
    {
        static BYTE parms[] = VTS_BOOL ;
        InvokeHelper(0x14, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, newValue);
    }
    BOOL get_PortOpen()
    {
        BOOL result;
        InvokeHelper(0x14, DISPATCH_PROPERTYGET, VT_BOOL, (void*)&result, NULL);
        return result;
    }
    void put_RThreshold(short newValue)
    {
        static BYTE parms[] = VTS_I2 ;
        InvokeHelper(0x15, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, newValue);
    }
    short get_RThreshold()
    {
        short result;
        InvokeHelper(0x15, DISPATCH_PROPERTYGET, VT_I2, (void*)&result, NULL);
        return result;
    }
    void put_RTSEnable(BOOL newValue)
    {
        static BYTE parms[] = VTS_BOOL ;
        InvokeHelper(0x16, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, newValue);
    }
    BOOL get_RTSEnable()
    {
        BOOL result;
        InvokeHelper(0x16, DISPATCH_PROPERTYGET, VT_BOOL, (void*)&result, NULL);
        return result;
    }
    void put_Settings(LPCTSTR newValue)
    {
        static BYTE parms[] = VTS_BSTR ;
        InvokeHelper(0x17, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, newValue);
    }
    CString get_Settings()
    {
        CString result;
        InvokeHelper(0x17, DISPATCH_PROPERTYGET, VT_BSTR, (void*)&result, NULL);
        return result;
    }
    void put_SThreshold(short newValue)
    {
        static BYTE parms[] = VTS_I2 ;
        InvokeHelper(0x18, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, newValue);
    }
    short get_SThreshold()
    {
        short result;
        InvokeHelper(0x18, DISPATCH_PROPERTYGET, VT_I2, (void*)&result, NULL);
        return result;
    }
    void put_Output(VARIANT newValue)
    {
        static BYTE parms[] = VTS_VARIANT ;
        InvokeHelper(0x19, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, &newValue);
    }
    VARIANT get_Output()
    {
        VARIANT result;
        InvokeHelper(0x19, DISPATCH_PROPERTYGET, VT_VARIANT, (void*)&result, NULL);
        return result;
    }
    void put_Input(VARIANT newValue)
    {
        static BYTE parms[] = VTS_VARIANT ;
        InvokeHelper(0x1a, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, &newValue);
    }
    VARIANT get_Input()
    {
        VARIANT result;
        InvokeHelper(0x1a, DISPATCH_PROPERTYGET, VT_VARIANT, (void*)&result, NULL);
        return result;
    }
    void put_CommEvent(short newValue)
    {
        static BYTE parms[] = VTS_I2 ;
        InvokeHelper(0x1b, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, newValue);
    }
    short get_CommEvent()
    {
        short result;
        InvokeHelper(0x1b, DISPATCH_PROPERTYGET, VT_I2, (void*)&result, NULL);
        return result;
    }
    void put_EOFEnable(BOOL newValue)
    {
        static BYTE parms[] = VTS_BOOL ;
        InvokeHelper(0x1c, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, newValue);
    }
    BOOL get_EOFEnable()
    {
        BOOL result;
        InvokeHelper(0x1c, DISPATCH_PROPERTYGET, VT_BOOL, (void*)&result, NULL);
        return result;
    }
    void put_InputMode(long newValue)
    {
        static BYTE parms[] = VTS_I4 ;
        InvokeHelper(0x1d, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, newValue);
    }
    long get_InputMode()
    {
        long result;
        InvokeHelper(0x1d, DISPATCH_PROPERTYGET, VT_I4, (void*)&result, NULL);
        return result;
    }
    void AboutBox()
    {
        InvokeHelper(DISPID_ABOUTBOX, DISPATCH_METHOD, VT_EMPTY, NULL, NULL);
    }

// Properties
//



};

// CMcomm.cpp

// 计算机生成了由 Microsoft Visual C++ 创建的 IDispatch 包装类

// 注意: 不要修改此文件的内容。如果此类由
//  Microsoft Visual C++ 重新生成,您的修改将被覆盖。


#include "stdafx.h"
#include "mscomm1.h"

/
// CMscomm1

IMPLEMENT_DYNCREATE(CMscomm1, CWnd)

/
// CMscomm1 属性

/
// CMscomm1 操作

// cpp文件没有做改动,无须修改

//使用方法:

//  m_ctrlComm2,串口控件变量
//  m_Com_3303,串口选择combobox 变量
void CUSFDlg::OnCbnSelchangeCom3303()
{
	// TODO: 在此添加控件通知处理程序代码
	int nSel;
	nSel = m_Com_3303.GetCurSel();//获取组合框控件的列表框中选中项的索引

	m_ctrlComm2.put_CommPort(nSel + 1);//选择串口号(这里因为列表框的索引号是从0开始,所以(nSel+1)对应的才是我们所选的串口号)
	m_ctrlComm2.put_PortOpen(TRUE);//打开串口
	m_ctrlComm2.put_RThreshold(5);//收到两个字节引发OnComm事件 
	m_ctrlComm2.put_InputMode(1);//输入模式选为二进制 
	m_ctrlComm2.put_Settings(_T("9600,n,8,1"));//设置串口参数
	m_ctrlComm2.put_InputMode(1);  // 以二进制方式检取数据 
	m_ctrlComm2.put_RThreshold(5); //参数1表示每当串口接收缓冲区中有多于或等于1个字符时将引发一个接收数据的OnComm事件 
	m_ctrlComm2.put_InputLen(0); //设置当前接收区数据长度为0 
	m_ctrlComm2.get_Input();//先预读缓冲区以清除残留数据  

	m_setOK = true;     //标记串口设置OK

	
}
// conmbobox 的selctchenge消息触发发送信号
void CUSFDlg::OnCbnSelchange3303cmd()
{
	// TODO: 在此添加控件通知处理程序代码
	int nSel = m_3303.GetCurSel();
	CString str;
	
	switch (nSel)
	{
	case 0:
		str = _T("OUT1\n");
		m_ctrlComm2.put_Output(COleVariant(str));
		break;
	case 1:
		str = _T("OUT0\n");
		m_ctrlComm2.put_Output(COleVariant(str));
		break;
	case 2:
		str = _T("IOUT1?\n");
		m_ctrlComm2.put_Output(COleVariant(str));
		break;
	case 3:
		str = _T("IOUT2?\n");
		m_ctrlComm2.put_Output(COleVariant(str));

		break;
	case 4:
		str = _T("VSET1:3.3\n");
		m_ctrlComm2.put_Output(COleVariant(str));
		break;
	case 5:
		str = _T("VSET2:3.3\n");
		m_ctrlComm2.put_Output(COleVariant(str));
		break;
		
	}
	
}
// 接收中断函数
// m_EditReveive :接收信号显示edit,cstring(值型变量)
void CUSFDlg::OnCommMscomm3()
{
	// TODO: 在此处添加消息处理程序代码
	if (m_ctrlComm2.get_CommEvent() == 2)	//事件值为2表示接收缓冲区内有字符
	{
		char str[1024] = { 0 };
		long k;
		VARIANT InputData = m_ctrlComm2.get_Input();	//读缓冲区
		COleSafeArray fs;
		fs = InputData;	//VARIANT型变量转换为COleSafeArray型变量
		for (k = 0; k < fs.GetOneDimSize(); k++)
			fs.GetElement(&k, str + k);	//转换为BYTE型数组
		//m_EditReveive = L("dwad");
		m_EditReveive = str;      //	接收到编辑框里面
		//m_Icc = str;
		//m_List.SetItemText(13, 0, m_Icc);
		//m_EditReveive.SetWindowTextW();
		//SetTimer(1,10,NULL);		//
		//UpdateData(false); //更新到控件
	}
}

接收中断的添加,右键MScomm组件->添加消息处理程序->OnComm ,添加以上代码即可

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值