1. 程式人生 > >基於VC6.0 MFC的簡單串列埠通訊軟體程式設計總結

基於VC6.0 MFC的簡單串列埠通訊軟體程式設計總結

想想上回玩VC是幾年前搞畢設時的事了,這回編這個串列埠軟體也花了好幾天時間,做個小結積累一下吧:

(一)基於對話方塊程式設計基本步驟:

1.新建基於對話方塊的工程;

2.拖曳所需的基本控制元件,構成介面;

3.使用類嚮導(CLASS WIZARD)建立與基本控制元件對應的成員變數、成員函式,確定與函式相應的訊息或事件——即觸礁發該函式執行的條件(如單擊等)。

(二)使用mscomm控制元件:

1.基本設定:

m_com.SetCommPort(1); //選擇COM1

m_com.SetInBufferSize(1024); //設定輸入緩衝區的大小,Bytes

m_com.SetOutBufferSize(256); //設定輸出緩衝區的大小,Bytes

if(!m_com.GetPortOpen()) //開啟串列埠   

m_com.SetPortOpen(TRUE);

m_com.SetInputMode(1); //設定輸入方式為二進位制方式

m_com.SetSettings("4800,s,8,1"); 

m_com.SetRThreshold(1); //為1表示有一個字元引發一個事件    

m_com.SetInputLen(0);

2.似乎每次設定m_com.SetSettings("4800,s,8,1"),必須先關再開串口才有效。設定的校驗位似乎只對傳送資料有效,對接收資料無效。

3.雖然m_com.SetRThreshold(1)設定接收到一個字元就引發一個事件(觸發執行函式),但執行函式讀取到的資料可能不止1Byte,如另一串列埠連續傳送多個位元組,當串接收到第一個位元組後就觸發函式,但在函式去輸入緩衝區讀取資料時可以讀到8Byte。

(三)MFC的一些基本使用:

1.Unsigned char 與char不同,在執行加減時,char型當作帶符號數(可能為負)。

2.當控制元件對應的變數是控制元件類時,可能通過該類的成員函式來獲取資料或執行操作:如m_com是mscomm控制元件的變數,可以執行m_com.SetPortOpen(FALSE)來關閉串列埠。

3.組合框對應的成員變數(int):當滑鼠點取第N行資料時,用UpdateData(TRUE)更新此變數值後,變數=N-1。

UpdateData(true);//用於將螢幕上控制元件中的資料交換到變數中。要接受使用者的輸入就trueUpdateData(false);//用於將資料在螢幕中對應控制元件中顯示出來。要輸

結果給使用者就flase

使用UpdateData()函式時,當前介面上所有綁定了的變數(即通過MFC ClassWizard給控制元件添加了對應的變數)都會被UpdateData(TRUE)更新成對應控制元件中的內容;同樣所有綁定了變數的控制元件中的內容也會UpdateData(FALSE)更新成對應變數中的內容。資料量不多的話,最好用SetDlgItemText()和GetDlgItemText().GetWindowText()是獲取控制元件當前內容(Caption或者the text within the control —for the control,具體可以檢視MSDN)值,是對單個控制元件而言; 而UpdateData()是作用於整個CWnd的DDX資料交換機制之中的,是控制元件和資料的雙向通道。

4.

GetDlgItem(IDC_CLOSE)->EnableWindow(FALSE);//禁用某控制元件(變灰)

GetDlgItem(IDC_OPEN)->EnableWindow(TRUE);//啟用某控制元件

GetDlgItem(IDC_COMRXD)->SetWindowText(0);//清空編緝控制元件的內容

GetDlgItem(IDC_COMTXD)->SetWindowText(m_strT);//設定編緝控制元件的內容為

                                               //m_strT(CSring類)

m_filename.GetWindowText(strName);//獲取編緝控制元件的內容,strName為CSring類

strName += ".txt";//CSring類的加操作

nLength=m_nEdit.GetWindowTextLength();//獲取編緝控制元件的位元組數

m_nEdit.GetWindowText(strData);

file.Open(strName,CFile::modeCreate | CFile::modeWrite);//儲存資料成檔案。

file.Write(strData,nLength);

file.Close();