📄 setport.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 + -