📄 serialcontroldlg.cpp
字号:
wq ="19200";
break;
case 10:
wq="38400";
break;
case 11:
wq ="57600";
break;
case 12:
wq ="115200";
break;
default:
break;
}
BR=wq;
BR+=",";
switch(m_CheckBitWaiter1.GetCurSel())
{
case 0:
wq="E";
break;
case 1:
wq="M";
break;
case 2:
wq="N";
break;
case 3:
wq="O";
break;
case 4:
wq="S";
break;
default:
break;
}
BR+=wq;
BR+=",";
switch(m_DateBitWaiter1.GetCurSel())
{
case 0:
wq="8";
break;
case 1:
wq="7";
break;
case 2:
wq="6";
break;
case 3:
wq="5";
break;
default:
break;
}
BR+=wq;
BR+=",";
switch(m_StopBitWaiter1.GetCurSel())
{
case 0:
wq="1";
break;
case 1:
wq="1.5";
break;
case 2:
wq="2";
break;
default:
break;
}
BR+=wq;
int a;
a=m_Waiter1Name.GetCurSel();
m_Waiter1Name.GetLBText(a, wq);
sh="没有";
df="串口或串口被占用";
error=sh + wq + df;
m_Waiter1.SetCommPort(a+1);
m_Waiter1.SetPortOpen(TRUE); //打开串口,以判断串口是否存在
if(m_Waiter1.GetPortOpen()) //如果串口是打开的,则行关闭串口
{
m_Waiter1.SetPortOpen(FALSE);
m_Waiter1.SetInBufferSize(1024); //接收缓冲区
m_Waiter1.SetOutBufferSize(1024);//发送缓冲区
m_Waiter1.SetInputLen(0);//设置当前接收区数据长度为0,表示全部读取
m_Waiter1.SetInputMode(1);//以二进制方式读写数据
m_Waiter1.SetRThreshold(1);//接收缓冲区有1个及1个以上字符时,将引发接收数据的OnComm事件
m_Waiter1.SetSettings(BR);//波特率9600无检验位,8个数据位,1个停止位
m_Waiter1.SetOutBufferCount(0);
m_Waiter1.SetPortOpen(TRUE);
m_StatusWaiter1="打开";
Waiter1Active=TRUE;
GetDlgItem(IDC_OPEN_MASTER2)->EnableWindow(FALSE);
GetDlgItem(IDC_CLOSE_MASTER2)->EnableWindow(TRUE);
}
else
MessageBox(error);
UpdateData(FALSE);
}
void CSerialControlDlg::OnCloseMaster2()
{
// TODO: Add your control notification handler code here
m_Waiter1.SetPortOpen(FALSE);
GetDlgItem(IDC_OPEN_MASTER2)->EnableWindow(TRUE);
GetDlgItem(IDC_CLOSE_MASTER2)->EnableWindow(FALSE);
m_StatusWaiter1="关闭";
Waiter1Active=FALSE;
UpdateData(FALSE);
}
void CSerialControlDlg::OnCloseMaster3()
{
// TODO: Add your control notification handler code here
m_Waiter2.SetPortOpen(FALSE);
GetDlgItem(IDC_OPEN_MASTER3)->EnableWindow(TRUE);
GetDlgItem(IDC_CLOSE_MASTER3)->EnableWindow(FALSE);
m_StatusWaiter2="关闭";
Waiter2Active=FALSE;
UpdateData(FALSE);
}
void CSerialControlDlg::OnOpenMaster3()
{
// TODO: Add your control notification handler code here
CString error,sh,df,wq,BR;
switch(m_BoudRateMaster.GetCurSel())
{
case 0:
wq="300";
break;
case 1:
wq="600";
break;
case 2:
wq="1200";
break;
case 3:
wq="1800";
break;
case 4:
wq="2400";
break;
case 5:
wq="4800";
break;
case 6:
wq="7200";
break;
case 7:
wq="9600";
break;
case 8:
wq="14400";
break;
case 9:
wq ="19200";
break;
case 10:
wq="38400";
break;
case 11:
wq ="57600";
break;
case 12:
wq ="115200";
break;
default:
break;
}
BR=wq;
BR+=",";
switch(m_CheckBitWaiter2.GetCurSel())
{
case 0:
wq="E";
break;
case 1:
wq="M";
break;
case 2:
wq="N";
break;
case 3:
wq="O";
break;
case 4:
wq="S";
break;
default:
break;
}
BR+=wq;
BR+=",";
switch(m_DateBitWaiter2.GetCurSel())
{
case 0:
wq="8";
break;
case 1:
wq="7";
break;
case 2:
wq="6";
break;
case 3:
wq="5";
break;
}
BR+=wq;
BR+=",";
switch(m_StopBitWaiter2.GetCurSel())
{
case 0:
wq="1";
break;
case 1:
wq="1.5";
break;
case 2:
wq="2";
break;
default:
break;
}
BR+=wq;
int a;
a=m_Waiter2Name.GetCurSel();
m_Waiter2Name.GetLBText(a, wq);
sh="没有";
df="串口或串口被占用";
error=sh + wq + df;
m_Waiter2.SetCommPort(a+1);
m_Waiter2.SetPortOpen(TRUE); //打开串口,以判断串口是否存在
if(m_Waiter2.GetPortOpen()) //如果串口是打开的,则行关闭串口
{
m_Waiter2.SetPortOpen(FALSE);
m_Waiter2.SetInBufferSize(1024); //接收缓冲区
m_Waiter2.SetOutBufferSize(1024);//发送缓冲区
m_Waiter2.SetInputLen(0);//设置当前接收区数据长度为0,表示全部读取
m_Waiter2.SetInputMode(1);//以二进制方式读写数据
m_Waiter2.SetRThreshold(1);//接收缓冲区有1个及1个以上字符时,将引发接收数据的OnComm事件
m_Waiter2.SetSettings(BR);//波特率9600无检验位,8个数据位,1个停止位
m_Waiter2.SetOutBufferCount(0);
m_Waiter2.SetPortOpen(TRUE);
m_StatusWaiter2="打开";
Waiter2Active=TRUE;
GetDlgItem(IDC_OPEN_MASTER3)->EnableWindow(FALSE);
GetDlgItem(IDC_CLOSE_MASTER3)->EnableWindow(TRUE);
GetDlgItem(IDC_SEND_MASTER3)->EnableWindow(TRUE);
UpdateData(FALSE);
}
else
MessageBox(error);
}
void CSerialControlDlg::OnSendMaster2()
{
// TODO: Add your control notification handler code here
if(m_Waiter1.GetPortOpen())
{
UpdateData(TRUE);
CByteArray OutBuf;
COleVariant varOutput;
OutBuf.SetSize(m_SendDateWaiter1.GetLength());
for(int i=0;i<m_SendDateWaiter1.GetLength();i++)
OutBuf[i]=m_SendDateWaiter1.GetAt(i);
varOutput=OutBuf;
m_Waiter1.SetOutput(varOutput);
}
}
void CSerialControlDlg::OnSendMaster3()
{
// TODO: Add your control notification handler code here
if(m_Waiter2.GetPortOpen())
{
UpdateData(TRUE);
CByteArray OutBuf;
COleVariant varOutput;
OutBuf.SetSize(m_SendDateWaiter2.GetLength());
for(int i=0;i<m_SendDateWaiter2.GetLength();i++)
OutBuf[i]=m_SendDateWaiter2.GetAt(i);
varOutput=OutBuf;
m_Waiter2.SetOutput(varOutput);
}
UpdateData();
}
void CSerialControlDlg::OnOnCommMscomwaiter1()
{
// TODO: Add your control notification handler code here
VARIANT variant_inp;
COleSafeArray safearray_inp;
LONG len,k;
BYTE rxdata[2048]; //设置BYTE数组 An 8-bit integerthat is not signed.
CString strtemp;
if(m_Waiter1.GetCommEvent()==2) //事件值为2表示接收缓冲区内有字符
{ ////////以下你可以根据自己的通信协议加入处理代码
variant_inp=m_Waiter1.GetInput(); //读缓冲区
if(!m_T_R)
{
safearray_inp=variant_inp; //VARIANT型变量转换为ColeSafeArray型变量
len=safearray_inp.GetOneDimSize(); //得到有效数据长度
for(k=0;k<len;k++)
safearray_inp.GetElement(&k,rxdata+k);//转换为BYTE型数组
for(k=0;k<len;k++) //将数组转换为Cstring型变量
{
BYTE bt=*(char*)(rxdata+k); //字符型
strtemp.Format("%c",bt); //将字符送入临时变量strtemp存放
m_ReciveWaiter1+=strtemp; //加入接收编辑框对应字符串
}
UpdateData(FALSE);
}
}
//更新编辑框内容
if(m_Master.GetPortOpen())
{
m_Master.SetOutput(variant_inp);//发送数据
}
}
void CSerialControlDlg::OnOnCommMscomwaiter2()
{
// TODO: Add your control notification handler code here
VARIANT variant_inp;
COleSafeArray safearray_inp;
LONG len,k;
BYTE rxdata[2048]; //设置BYTE数组 An 8-bit integerthat is not signed.
CString strtemp;
if(m_Waiter2.GetCommEvent()==2) //事件值为2表示接收缓冲区内有字符
{ ////////以下你可以根据自己的通信协议加入处理代码
variant_inp=m_Waiter2.GetInput(); //读缓冲区
if(!m_T_R)
{
safearray_inp=variant_inp; //VARIANT型变量转换为ColeSafeArray型变量
len=safearray_inp.GetOneDimSize(); //得到有效数据长度
for(k=0;k<len;k++)
safearray_inp.GetElement(&k,rxdata+k);//转换为BYTE型数组
for(k=0;k<len;k++) //将数组转换为Cstring型变量
{
BYTE bt=*(char*)(rxdata+k); //字符型
strtemp.Format("%c",bt); //将字符送入临时变量strtemp存放
m_ReciveWaiter2+=strtemp; //加入接收编辑框对应字符串
}
UpdateData(FALSE);
}
}
//更新编辑框内容
if(m_Master.GetPortOpen())
{
m_Master.SetOutput(variant_inp);//发送数据
}
}
void CSerialControlDlg::OnSelchangeMasterName()
{
// TODO: Add your control notification handler code here
if(m_Master.GetPortOpen())
{
m_Master.SetPortOpen(FALSE);
GetDlgItem(IDC_OPEN_MASTER)->EnableWindow(TRUE);
GetDlgItem(IDC_CLOSE_MASTER)->EnableWindow(FALSE);
}
if(m_Waiter1.GetPortOpen())
{
m_Waiter1.SetPortOpen(FALSE);
GetDlgItem(IDC_OPEN_MASTER2)->EnableWindow(TRUE);
GetDlgItem(IDC_CLOSE_MASTER2)->EnableWindow(FALSE);
}
if(m_Waiter2.GetPortOpen())
{
m_Waiter2.SetPortOpen(FALSE);
GetDlgItem(IDC_OPEN_MASTER3)->EnableWindow(TRUE);
GetDlgItem(IDC_CLOSE_MASTER3)->EnableWindow(FALSE);
}
}
void CSerialControlDlg::OnSelchangeMasterName2()
{
// TODO: Add your control notification handler code here
if(m_Master.GetPortOpen())
{
m_Master.SetPortOpen(FALSE);
GetDlgItem(IDC_OPEN_MASTER)->EnableWindow(TRUE);
GetDlgItem(IDC_CLOSE_MASTER)->EnableWindow(FALSE);
}
if(m_Waiter1.GetPortOpen())
{
m_Waiter1.SetPortOpen(FALSE);
GetDlgItem(IDC_OPEN_MASTER2)->EnableWindow(TRUE);
GetDlgItem(IDC_CLOSE_MASTER2)->EnableWindow(FALSE);
}
if(m_Waiter2.GetPortOpen())
{
m_Waiter2.SetPortOpen(FALSE);
GetDlgItem(IDC_OPEN_MASTER3)->EnableWindow(TRUE);
GetDlgItem(IDC_CLOSE_MASTER3)->EnableWindow(FALSE);
}
}
void CSerialControlDlg::OnSelchangeMasterName3()
{
// TODO: Add your control notification handler code here
if(m_Master.GetPortOpen())
{
m_Master.SetPortOpen(FALSE);
GetDlgItem(IDC_OPEN_MASTER)->EnableWindow(TRUE);
GetDlgItem(IDC_CLOSE_MASTER)->EnableWindow(FALSE);
}
if(m_Waiter1.GetPortOpen())
{
m_Waiter1.SetPortOpen(FALSE);
GetDlgItem(IDC_OPEN_MASTER2)->EnableWindow(TRUE);
GetDlgItem(IDC_CLOSE_MASTER2)->EnableWindow(FALSE);
}
if(m_Waiter2.GetPortOpen())
{
m_Waiter2.SetPortOpen(FALSE);
GetDlgItem(IDC_OPEN_MASTER3)->EnableWindow(TRUE);
GetDlgItem(IDC_CLOSE_MASTER3)->EnableWindow(FALSE);
}
}
void CSerialControlDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
CDialog::OnSysCommand(nID, lParam);
switch(nID)
{
case SC_MINIMIZE:
Shell_NotifyIcon(NIM_ADD,&m_NotiIconData);//在托盘区添加图标
ShowWindow(SW_HIDE);//隐藏主窗口
m_IsHided=true;
break;
}
}
void CSerialControlDlg::OnBnClickedOk()
{
// TODO: Add your control notification handler code here
SendMessage(WM_SYSCOMMAND,SC_MINIMIZE);
}
void CSerialControlDlg::OnCancel()
{
int ret;
if(m_IsHided)
ret=MessageBox("真的要退出吗?","确认",MB_YESNO);
else
ret=MessageBox("真的要退出吗?(按否最小化到系统托盘图标中.)","确认",MB_YESNOCANCEL);
if(IDYES==ret)
{
Shell_NotifyIcon(NIM_DELETE,&m_NotiIconData);//删掉托盘区图标
CDialog::OnCancel();
}
if(IDNO==ret)
SendMessage(WM_SYSCOMMAND,SC_MINIMIZE);
}
LRESULT CSerialControlDlg::OnTaskbarRecreate( WPARAM wParam,LPARAM lParam)
{
Shell_NotifyIcon(NIM_DELETE,&m_NotiIconData);//删掉托盘区图标
if(m_IsHided)
Shell_NotifyIcon(NIM_ADD,&m_NotiIconData);//
return 0;
}
//wParam接收的是图标的ID,而lParam接收的是鼠标的行为
LRESULT CSerialControlDlg::OnClickTaskIcon(WPARAM wParam,LPARAM lParam)
{
if(wParam!=IDR_MAINFRAME)
return 1;
switch(lParam)
{
case WM_RBUTTONUP://右键起来时弹出快捷菜单
/*{
LPPOINT lpoint=new tagPOINT;
::GetCursorPos(lpoint);//得到鼠标位置
CMenu menu;
menu.CreatePopupMenu();//声明一个弹出式菜单
//增加菜单项“关闭”,点击则发送消息WM_DESTROY给主窗口(已
//隐藏),将程序结束。
menu.AppendMenu(MF_STRING,WM_DESTROY,"关闭");
//确定弹出式菜单的位置
menu.TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON|TPM_LEFTBUTTON ,lpoint->x,lpoint->y,this);
//资源回收
HMENU hmenu=menu.Detach();
menu.DestroyMenu();
delete lpoint;
}
break; */
case WM_LBUTTONDBLCLK:
case WM_RBUTTONDBLCLK:
case WM_LBUTTONUP:
{
m_IsHided=false;
Shell_NotifyIcon(NIM_DELETE,&m_NotiIconData);//删掉托盘区图标
//SetWindowPos(&CWnd::wndTop, 0, 0, 0, 0,SWP_NOMOVE|SWP_NOSIZE);
this->ShowWindow(SW_SHOW );//显示主窗口
this->ShowWindow(SW_SHOWNORMAL );//显示主窗口
}
break;
}
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -