⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 setport.cpp

📁 实现串口通信测试的程序
💻 CPP
字号:
// Setport.cpp : implementation file
//

#include "stdafx.h"
#include "CommTest.h"
#include "Setport.h"
#include "math.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CSetport dialog
void mesbox(  DWORD c) 
{
	CString s;
	s.Format("%d",c);
	//::MessageBox(NULL,s,"the value is ---",MB_OK);
}

BOOL CSetport::OnInitDialog()
{
   CDialog::OnInitDialog();  
		// Val.Add('n');  Val.Add('o');  Val.Add('e'); Val.Add('m');  Val.Add('s');
   
    Val="noems";      // 0-4=no,odd,even,mark,space   
 
	Caption.Add("无校验");
	Caption.Add("偶校验");
	Caption.Add("奇校验");
    Caption.Add ("Mark");
    Caption.Add("Space");	
 
   CString s;                                     //初始化列表选择框;
   for(int i=1;i<=4;i++)
   {
	   s.Format("COM%d",i);
	   m_port.AddString(s);
   }
   m_port.SetCurSel(Port_settings.CurPortID-1);   

   // 置波特率设置项;
   HWND  hwnd; 
   s.Format("%d",Port_settings.BaudRate);
                      //注意:第三个参数(类名)为 "Button" ,而不是"CButton");
   hwnd= ::FindWindowEx(this ->m_hWnd,NULL ,"Button",s);
   ::SendMessage(hwnd, BM_SETCHECK, 1, 0);

   // 置数据位设置项;
   s.Format("%d",Port_settings.ByteSize);
   hwnd= ::FindWindowEx(this ->m_hWnd,NULL ,"Button",s);
   ::SendMessage(hwnd, BM_SETCHECK, 1, 0);
   
   //置停止位设置项;
   s.Format("%d",Port_settings.StopBits);
   hwnd= ::FindWindowEx(this ->m_hWnd,NULL ,"Button",s);
   ::SendMessage(hwnd, BM_SETCHECK, 1, 0);
 
   //置校验位设置项;
    for(i=0 ;i<5;i++)
   {	   
	   if( Val[i] == Port_settings.Parity )
	   { 		    
			//::MessageBox(NULL,s,"GGG",MB_OK);
            hwnd= ::FindWindowEx(this ->m_hWnd,NULL ,"Button",Caption[i]); 
			::SendMessage(hwnd, BM_SETCHECK, 1, 0);
		    break;
       }    
	}
   return TRUE;

}


CSetport::CSetport(CWnd* pParent /*=NULL*/)
	: CDialog(CSetport::IDD, pParent)
{
	//{{AFX_DATA_INIT(CSetport)
		// NOTE: the ClassWizard will add member initialization here
	//}}AFX_DATA_INIT
}

CSetport::CSetport(CWnd* pParent , CUR_SETS* portDCb)
	: CDialog(CSetport::IDD, pParent)
{
  
    Port_settings.BaudRate =portDCb->BaudRate ;
    Port_settings.ByteSize=portDCb->ByteSize;
    Port_settings.Parity=portDCb->Parity;
    Port_settings.StopBits=portDCb->StopBits;
	Port_settings.CurPortID=portDCb->CurPortID;

	CString s;
	s.Format("%d",Port_settings.BaudRate);
	//MesBox(s);
	//::MessageBox(NULL,s,"DDDD",MB_OK);
}

void CSetport::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CSetport)
	DDX_Control(pDX, IDC_COMBO1, m_port);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CSetport, CDialog)
	//{{AFX_MSG_MAP(CSetport)
		// NOTE: the ClassWizard will add message map macros here
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()



void CSetport::OnOK()
{
	
	SaveSettings();
	CDialog::OnOK();

}
/////////////////////////////////////////////////////////////////////////////
// CSetport message handlers


void CSetport::SaveSettings()
{
   DWORD beginVal=IDC_BAUDRATE1;  //波特率设置;
   DWORD endVal=IDC_BAUDRATE1+12;
   HWND hwnd=NULL;
   int IsChecked=0;
   for(beginVal;beginVal<=endVal;beginVal++) //return (int)::SendMessage(m_hWnd, BM_GETCHECK, 0, 0); }
   {
	   hwnd=::GetDlgItem(this->m_hWnd,beginVal);         // 用发送消息的方式获得按钮的状态;
       IsChecked=::SendMessage(hwnd, BM_GETCHECK, 0, 0);
	   if (IsChecked==1)
	   {		   
		   CString str;						//int val=0;
									        //GetDlgItemInt(beginVal,&val,FALSE);
		   GetDlgItemText(beginVal,str);
		   DWORD val=stringTOval(str);						    //CString ss;
		  
		   Port_settings.BaudRate=val;
           IsChecked=0;
		   break;
	   }
   }

   beginVal=IDC_DATABYTE1;    // 数据位;
   endVal=IDC_DATABYTE1+4;
   for(beginVal;beginVal<=endVal;beginVal++) //return (int)::SendMessage(m_hWnd, BM_GETCHECK, 0, 0); }
   {
	   hwnd=::GetDlgItem(this->m_hWnd,beginVal);
       IsChecked=::SendMessage(hwnd, BM_GETCHECK, 0, 0);
	   if (IsChecked==1)
	   {
		   CString str;						//int val=0;
									        //GetDlgItemInt(beginVal,&val,FALSE);
		   GetDlgItemText(beginVal,str);
		   DWORD val=stringTOval(str);			
		   Port_settings.ByteSize=val;
           IsChecked=0;
		   break;
	   }
   }
   
   beginVal=IDC_STOPBYTE1;    //停止位;
   endVal=IDC_STOPBYTE1+2;
   for(beginVal;beginVal<=endVal;beginVal++) //return (int)::SendMessage(m_hWnd, BM_GETCHECK, 0, 0); }
   {
	   hwnd=::GetDlgItem(this->m_hWnd,beginVal);
       IsChecked=::SendMessage(hwnd, BM_GETCHECK, 0, 0);
	   if (IsChecked==1)
	   {
		   CString str;						//int val=0;
									        //GetDlgItemInt(beginVal,&val,FALSE);
		   GetDlgItemText(beginVal,str);
		   DWORD val=stringTOval(str);			
		   Port_settings.StopBits=val;
           IsChecked=0;
		   break;
	   }
   }

   beginVal=IDC_PARITY1;    //校验位;
   endVal=IDC_PARITY1+4;
   for(beginVal;beginVal<=endVal;beginVal++) //return (int)::SendMessage(m_hWnd, BM_GETCHECK, 0, 0); }
   {
	   hwnd=::GetDlgItem(this->m_hWnd,beginVal);
       IsChecked=::SendMessage(hwnd, BM_GETCHECK, 0, 0);
	   if (IsChecked==1)
	   {
		  
		   Port_settings.Parity=Val[(int) (beginVal- IDC_PARITY1)]; 
           IsChecked=0;
		   break;
	   }
   }

     //当前使用的串口;
     Port_settings.CurPortID=m_port.GetCurSel()+1;
}

DWORD CSetport::stringTOval(CString str)  //将数字字符串转换成数值;
{
    int len =0;            //字符串长度;
    int docPosition=0;    // 小数点 '.' 的位置;
	DWORD val=0;
	str.TrimLeft();         //去除空格;
	str.TrimRight();

	len=str.GetLength();
	if(len<=0) return 0;
    
 

	docPosition=str.Find('.');
	if (docPosition==0) return  0;
	if (docPosition==len-1) return 0;
  

	if (docPosition==-1)  // 没有小数点;
	{   		
		str.MakeReverse();
		int thisByte=0;
		for(int i=0;i<len;i++)
		{
		    thisByte=(char) str[i] - 48;			
			val+=thisByte * cf10(i);						
		}
		mesbox(val);
		return val;
	}else
	{
		CString SubStr;  // 计算小数点作边的部分;
	    SubStr=str.Left(docPosition);

		SubStr.MakeReverse();
		int sunLen=SubStr.GetLength();
		int thisByte=0;
		for(int i=0;i<sunLen;i++)
		{
		    thisByte=(char) SubStr[i]-48;
			val+=thisByte * cf10(i);
		}
		
		// 计算小数点右边的部分;

        SubStr=str.Right(len-sunLen-1);
		thisByte=(char)SubStr[0]-48;
        val+=thisByte * 0.1;
	    mesbox(thisByte );
    }
  return  val;
}



DWORD CSetport::cf10(int m) //求10的 m 次方;
{
 DWORD val=1;
 if(m==0) return 1;
 for(int i=1 ;i<=m;i++)
 {
	 val=10*val;
 }

 return val;
}



⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -