首先,在對話框中創建通信控件,若Control工具欄中缺少該控件,可通過菜單Project --> Add to Project --> Components and Control插入即可,再將該控件從工具箱中拉到對話框中。此時,你只需要關心控件提供的對 Windows 通訊驅動程序的 API 函數的接口。
<!-- frame contents -->
<!-- /frame contents -->
換句話說,只需要設置和監視MSComm控件的屬性和事件。
打開所需串口後,需要考慮串口通信的時機。在接收或發送數據過程中,可能需要監視並響應一些事件和錯誤,所以事件驅動是處理串行端口交互作用的一種非常有效的方法。使用 OnComm 事件和 CommEvent 屬性捕捉並檢查通訊事件和錯誤的值。發生通訊事件或錯誤時,將觸發 OnComm 事件,CommEvent 屬性的值將被改變,應用程序檢查 CommEvent 屬性值並作出相應的反應
// 若是在SDI中使用該控件則要調用下兩句,在對話框程序中該語句有MFC自己創建
// 所以不用人為添加
DWord style=WS_VISIBLE;
m_MSComm.Create(NULL,style,CRect(0,0,0,0),this,IDC_MSCOMM1);
// 串口控件的初始化
DWORD style=WS_VISIBLE;
m_MSComm.Create(NULL,style,CRect(0,0,0,0),this,IDC_MSCOMM1);
if(m_MSComm.GetPortOpen()) //假如串口是打開的,則行關閉串口
{
m_MSComm.SetPortOpen(FALSE);
}
m_MSComm.SetCommPort(1); //選擇COM1
m_MSComm.SetInBufferSize(1024); //接收緩沖區
m_MSComm.SetOutBufferSize(1024);//發送緩沖區
m_MSComm.SetInputLen(0);//設置當前接收區數據長度為0,表示全部讀取
m_MSComm.SetInputMode(1);//以二進制方式讀寫數據
m_MSComm.SetRThreshold(1);//接收緩沖區有1個及1個以上字符時,將引發接收數據的OnComm事件
m_MSComm.SetSettings("9600,n,8,1");//波特率9600無檢驗位,8個數據位,1個停止位
if(!m_MSComm.GetPortOpen())//假如串口沒有打開則打開
m_MSComm.SetPortOpen(TRUE);//打開串口
else
m_MSComm.SetOutBufferCount(0);
// 控件事件的響應聲明
// *.h
//{{AFX_MSG(CGolfView)
afx_msg BOOL OnComm();
DECLARE_EVENTSINK_MAP()
/