利用ComoBox组合框控件选择串口号

环境VS2008

    BOOL XXXDlg::OnInitDialog()

{

   // TODO: 在此添加额外的初始化代码

   GetCom();

    int nselect=m_ctrlComoboComPort.GetCurSel()+1;    
    m_MSComm1.put_CommPort(short(nselect));

·

·

·

·

}


void CXXXXDlg::GetCom()//程序启动时获取全部可用串口
{
   
    HANDLE  hCom;
    int i,num,k;
    CString str;
    BOOL flag;

    ((CComboBox *)GetDlgItem(IDC_COMBO_ComPort))->ResetContent();
    flag = FALSE;
    num = 0;
    for (i = 1;i <= 16;i++)
    {//此程序支持16个串口
        str.Format(_T("\\\\.\\COM%d"),i);
        hCom = CreateFile(str, 0, 0, 0,
            OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
        if(INVALID_HANDLE_VALUE != hCom )
        {//能打开该串口,则添加该串口
            CloseHandle(hCom);
            str = str.Mid(4);
            ((CComboBox *)GetDlgItem(IDC_COMBO_ComPort))->AddString(str);
            if (flag == FALSE)
            {
                flag = TRUE;
                num = i;
            }
        }
    }
    i = ((CComboBox *)GetDlgItem(IDC_COMBO_ComPort))->GetCount();
    if (i == 0)
    {//若找不到可用串口则禁用“打开串口”功能
        ((CComboBox *)GetDlgItem(IDC_COMBO_ComPort))->EnableWindow(FALSE);
    }
    else
    {
        k = ((CComboBox *)GetDlgItem((IDC_COMBO_ComPort)))->GetCount();
        ((CComboBox *)GetDlgItem(IDC_COMBO_ComPort))->SetCurSel(k - 1);
    }
}


void CXXXXDlg::OnBnClickedButtonOpencomm()//打开串口按钮控件响应事件
{
    
    // TODO: 在此添加控件通知处理程序代码
    m_ctrlComoboBaudRate.GetCurSel();
    m_ctrlComoboDataBit.GetCurSel();
    m_ctrlComoboStopBit.GetCurSel();
    m_ctrlComoboParityBit.GetCurSel();
    UpdateData(TRUE);
    CString    strTmp;
    m_ctrlComoboComPort.GetWindowText(strTmp);
    if (!m_MSComm1.get_PortOpen())
    {
        m_MSComm1.put_PortOpen(TRUE);
        m_MSComm1.put_RThreshold(1);
        m_MSComm1.put_InputLen(0);    //设置当前接受缓冲区的中的字节长度为0,清除当前接受缓冲区的内容
        m_MSComm1.get_Input();        //先预读缓冲区以清楚残留数据
        if (m_MSComm1.get_PortOpen())
        {
            AfxMessageBox(_T("打开") +strTmp+ _T("成功!"));
            m_ctrlBmpPortStatus.SetIcon(m_hIconOn);
        }
        else  AfxMessageBox (_T("串口")+strTmp+_T("打开失败"));
        m_ctrlButtonOpenCom.SetWindowText(_T("关闭串口"));
    }
    else
    {
        m_MSComm1.put_PortOpen(FALSE);
        m_ctrlButtonOpenCom.SetWindowText(_T("打开串口"));
        m_ctrlBmpPortStatus.SetIcon(m_hIconOff);
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值