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

📄 serial portdlg.cpp

📁 VC实现单线程的串口通信程序
💻 CPP
📖 第 1 页 / 共 2 页
字号:
  //m_Send="";
  UpdateData(FALSE); // 发送区 清空  
  
}

BEGIN_EVENTSINK_MAP(CSerialportDlg, CDialog)
    //{{AFX_EVENTSINK_MAP(CSerialportDlg)
	ON_EVENT(CSerialportDlg, IDC_MSCOMM, 1 /* OnComm */, OnOnCommMscomm, VTS_NONE)
	//}}AFX_EVENTSINK_MAP
END_EVENTSINK_MAP()

void CSerialportDlg::OnOnCommMscomm() 
{
	int nEvent;
	VARIANT m_input;  // VARIANT 类型的 变量,  
	char *str,*str1;
	int k,i;
	CString str2;

	nEvent=m_Comm.GetCommEvent(); // 如果得到了  事件 

	switch(nEvent)
	{
	case 2:        // 这里仅仅 对 接受数据 这个事件 作处理 
		k=m_Comm.GetInBufferCount(); // 接受缓冲区 这时候的 字符数目   
        if (k>0)
        {
          m_input=m_Comm.GetInput(); //  把从缓冲区里读取的数据 放进 m_input 中 ;
		  str=(char*)(unsigned char*)m_input.parray->pvData;
        }
        i=0;
		str1=str;
		while (i<k)    // 只有前 K 个 字符 是有用的字符  后面的估计都是校验   
		{
			i++;
			str1++;
		}
      *str1='\0';
	  str2=(const char*)str;  
	  str2+="\r\n";//换行符 \r\n

	  m_Receive+=(LPCTSTR)str2; //得到最终的数据 
	 
	default:
		break;
	}

	UpdateData(FALSE);
//m_Receive=("\r\n");  
}

BOOL CSerialportDlg::OnEraseBkgnd(CDC* pDC) 
{
	CBitmap bmp;
	bmp.LoadBitmap(IDB_BT);
	CBrush brush(&bmp);
	CRect rc;
	GetClientRect(&rc);// 把矩形框的顶点 转移到用户的  对话框 起点 。。。
	pDC->FillRect(rc,&brush);  // 
	return true;  // 一定 要 变成  TURE  要不 不相应  !!
	
//	return CDialog::OnEraseBkgnd(pDC);
}

void CSerialportDlg::OnQuit() 
{
	CDialog::OnCancel();
	
}

void CSerialportDlg::OnInformation() 
{
	MessageBox("2006.10.25日\n 制作:于文文","关于串口调制器",MB_ICONINFORMATION|MB_OK);
	
}

void CSerialportDlg::OnSelchangeCombolist2() 
{
		CString m_str;  // 中介 
	GetDlgItemText(IDC_COMBOLIST2,m_str);  //得 对话框中某一个控件的文本内容 , 通过 ID号确定哪个控件 , 放在 临时字符串类 变量中 ..
	m_Speed=atoi(LPCTSTR(m_str));           //LPCTSTR 是 组合框条框的 数值类型
	                                   // i to a;
	
}

void CSerialportDlg::OnClearRe() 
{
	m_Receive="";
	UpdateData(FALSE);
	
}

void CSerialportDlg::OnClearSend() 
{
	m_Send="";
	UpdateData(FALSE);
	
}









/*
BOOL bState=GetDlgItem(IDC_LEFT)->IsWindowEnabled();
GetDlgItem(IDC_LEFT)->EnableWindow(!bState);	
GetDlgItem(IDC_CENTER)->EnableWindow(!bState);
GetDlgItem(IDC_RIGHT)->EnableWindow(!bState);
GetDlgItem(IDC_ENABLE_DISABLE)->SetWindowText(bState?"Enable":"Disable");*/


HBRUSH CSerialportDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
{
	HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
	
switch(nCtlColor) {

	case CTLCOLOR_STATIC:
		{
			if(pWnd->GetDlgCtrlID() == IDC_RSTATIC)
			{
				pDC->SetBkMode(TRANSPARENT);
				pDC->SetTextColor(RGB(255,10,10));
				hbr = (HBRUSH)GetStockObject(HOLLOW_BRUSH);
			}
			else if(pWnd->GetDlgCtrlID() == IDC_SSTATIC)
			{
				pDC->SetBkMode(TRANSPARENT);
				pDC->SetTextColor(RGB(255,10,10));
				hbr = (HBRUSH)GetStockObject(HOLLOW_BRUSH);
			}
           else if(pWnd->GetDlgCtrlID() == IDC_Periods)
			{
				pDC->SetBkMode(TRANSPARENT);
				pDC->SetTextColor(RGB(255,10,10));
				hbr = (HBRUSH)GetStockObject(HOLLOW_BRUSH);
			}
           else if(pWnd->GetDlgCtrlID() == IDC_Periods)
			{
				pDC->SetBkMode(TRANSPARENT);
				pDC->SetTextColor(RGB(255,10,10));
			hbr = (HBRUSH)GetStockObject(HOLLOW_BRUSH);
			} 
		   else if(pWnd->GetDlgCtrlID() == IDC_STATIC1)
			{
				pDC->SetBkMode(TRANSPARENT);
				pDC->SetTextColor(RGB(255,10,10));
				hbr = (HBRUSH)GetStockObject(HOLLOW_BRUSH);
			}
		    else if(pWnd->GetDlgCtrlID() == IDC_STATIC2)
			{
				pDC->SetBkMode(TRANSPARENT);
				pDC->SetTextColor(RGB(255,10,10));
				hbr = (HBRUSH)GetStockObject(HOLLOW_BRUSH);
			}
            else if(pWnd->GetDlgCtrlID() == IDC_STATIC3)
			{
				pDC->SetBkMode(TRANSPARENT);
				pDC->SetTextColor(RGB(255,10,10));
				hbr = (HBRUSH)GetStockObject(HOLLOW_BRUSH);
			}
            else if(pWnd->GetDlgCtrlID() == IDC_STATIC4)
			{
				pDC->SetBkMode(TRANSPARENT);
				pDC->SetTextColor(RGB(255,10,10));
				hbr = (HBRUSH)GetStockObject(HOLLOW_BRUSH);
			}
            else if(pWnd->GetDlgCtrlID() == IDC_STATIC5)
			{
				pDC->SetBkMode(TRANSPARENT);
				pDC->SetTextColor(RGB(255,10,10));
				hbr = (HBRUSH)GetStockObject(HOLLOW_BRUSH);
			}
            


			else if(pWnd->GetDlgCtrlID() == IDC_SerialState)
			{
				pDC->SetBkMode(TRANSPARENT);
				pDC->SetTextColor(RGB(255,10,10));
				hbr = (HBRUSH)GetStockObject(HOLLOW_BRUSH);
			}

			else
			{
				hbr = CDialog::OnCtlColor(pDC,pWnd,nCtlColor);
			}
		}
		break;
   	case CTLCOLOR_EDIT:
		{
			if (pWnd->GetDlgCtrlID() ==IDC_RECEIVEDATA)
			{
				pDC->SetBkMode(OPAQUE);
				pDC->SetTextColor(RGB(200,10,200)); //改变字体的颜色
				hbr = HBRUSH(GetStockObject(HOLLOW_BRUSH));
			}
			else if(pWnd->GetDlgCtrlID() == IDC_Time)
			{
				pDC->SetBkMode(OPAQUE);
				pDC->SetTextColor(RGB(200,10,200)); //改变字体的颜色
				hbr = HBRUSH(GetStockObject(HOLLOW_BRUSH));
			}



             	else if(pWnd->GetDlgCtrlID() == IDC_Time)
			{
				pDC->SetBkMode(OPAQUE);
				pDC->SetTextColor(RGB(200,10,10)); //改变字体的颜色
				hbr = HBRUSH(GetStockObject(HOLLOW_BRUSH));
			}
	     
			else
			{
				hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
			}
			break;		
		}

		case CTLCOLOR_BTN:
		{
			if (pWnd->GetDlgCtrlID() ==IDC_AutoSend)
			{
				pDC->SetBkMode(OPAQUE);
				pDC->SetTextColor(RGB(200,10,200)); //改变字体的颜色
				hbr = HBRUSH(GetStockObject(HOLLOW_BRUSH));
			}
			/*else if(pWnd->GetDlgCtrlID() == IDC_SENDDATA)
			{
			//	pDC->SetBkMode(TRANSPARENT);
				pDC->SetTextColor(RGB(200,10,200)); //改变字体的颜色
				hbr = HBRUSH(GetStockObject(HOLLOW_BRUSH));
			}



             	else if(pWnd->GetDlgCtrlID() == IDC_Time)
			{
				pDC->SetBkMode(OPAQUE);
				pDC->SetTextColor(RGB(200,10,10)); //改变字体的颜色
				hbr = HBRUSH(GetStockObject(HOLLOW_BRUSH));
			}*/
	     
			else
			{
				hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
			}
			break;		
		}

	default:
		break;}
	// TODO: Return a different brush if the default is not desired
	return hbr;

}
// 别把复选矿  和单选框 弄混阿   
void CSerialportDlg::OnAutoSend() // 单击小框 ,可以使周期框有效了 。  
{   UpdateData();//首先把文本框的数据 付给变量   
	if (m_bcheck) // 如果 复选矿被选中  则变量变成 TURE 那么 可以填写周期了。。
	{
     GetDlgItem(IDC_Time)->EnableWindow(1);
    	SetTimer(1,m_Periods,NULL);
          OnSend();
	}
	else
	{	
	
	//	m_Periods=10;
		//UpdateData(TRUE);
        GetDlgItem(IDC_Time)->EnableWindow(0);
	SetTimer(1,INFINITE,NULL);
m_bcheck=FALSE;
	}//OnAutoSend();

}


void CSerialportDlg::OnTimer(UINT nIDEvent) //电子表 
{
	// TODO: Add your message handler code here and/or call default
     	UpdateData();
	SetTimer(1,m_Periods,NULL);
    OnSend() ;
	CDialog::OnTimer(nIDEvent);
}
//定时
/*void CComm1Dlg::OnTimer(UINT nIDEvent) 
{
	UpdateData();
	SetTimer(1,m_Period,NULL);
	OnSendbtn();
	
	CDialog::OnTimer(nIDEvent);
}*/

⌨️ 快捷键说明

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