VC60MFC串口通信編寫全過程_第1頁
VC60MFC串口通信編寫全過程_第2頁
VC60MFC串口通信編寫全過程_第3頁
VC60MFC串口通信編寫全過程_第4頁
VC60MFC串口通信編寫全過程_第5頁
已閱讀5頁,還剩19頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

第頁其于MFC的串口調(diào)試助手編輯過程新建打開VC6.0文件新建工程MFCAppWiard(exe)位置(選擇保存工程位置)工程名稱(輸入工程名XXXX)確定選擇基本對話框下一步下一步下一步選擇(CXXXXDlg)完成確定在生成的基本對話框內(nèi)將不需要按鈕及提示框(自動生成的“確定”“取消”及提示框)刪除或修改使用,至此基本框架完成如下圖:此控件(標(biāo)志)是下面步驟添加進(jìn)來的串口控件此控件(標(biāo)志)是下面步驟添加進(jìn)來的串口控件往生成的基本框架中添加控件1、因為控件列表框內(nèi)沒有串口通信用到的通信控件,所以要先添加到控件列表框內(nèi)再將控件添加到基本框內(nèi)使用,步驟如下:菜單欄工程添加到工程Componentsandcontrols…RegisteredActiveXControls選擇“MicrosoftCommunicationsControl,version6.0”Insert確定OK關(guān)閉此子窗口完成添加操作標(biāo)志如上圖所示。基本框架2、將剛才添加添加到控件列表框內(nèi)的串口控件添加到基本框架內(nèi)基本框架 點擊控件列表框內(nèi)的串口控件,此時光標(biāo)變?yōu)椤笆毙?,在基本框架?nèi)隨意劃取一矩形區(qū)域,即可以添加串口控件,不需要修改此控件的大小及位置,因為程編譯運行后此控件是看不到的,步驟結(jié)果如下圖:3、繼續(xù)往基本框架內(nèi)添加用于編輯發(fā)送數(shù)據(jù)的輸入編輯框及輸出編輯框,同理選擇控件列表框內(nèi)的“編輯框控件”,以相同的操作即可添加兩個編輯窗口及一個按紐控件如下圖所示:選擇其中任意一個作為輸入編輯框及輸出編輯框 選擇其中任意一個作為輸入編輯框及輸出編輯框這兩個窗口需要修改大小及位置,因為程序運行后將會顯示而串口通信控件則不顯示,上圖是運行后的效果。4、對以上四個控件編程步驟如下:a、右擊串口通信控件建立類向?qū)embervariablesControlIDS中選擇IDC_MSCOMM1addvariable…Membervariablename中輸入控件變量名m_ctrlComm(變量名可以隨意選取,但程序中應(yīng)及所取變量名一致)OK確定b、右擊編輯框、屬性、常規(guī)、ID:中輸入ID號,此編輯框用于接收顯示數(shù)據(jù)的其ID號為IDC_EDIT_RXDATA(可以隨意選取,但程序中應(yīng)及所取ID號一致),再在此窗口的樣式中勾選”多行”,同時將“自動水平滾動(T)”勾選去掉,再勾選“垂直滾動(V)”,此勾選操作是用于垂直多行顯示的,按回車后即可輸入;同理右擊另一編輯框輸入ID號為IDC_EDIT_TXDATA此編輯框用于編輯發(fā)送數(shù)據(jù)的,同樣也選上用于垂直多行顯示,發(fā)送框可以不用垂直多行顯示;再為按鈕控件添加ID號,為IDC_BUTTON_MANUALSEND,并將標(biāo)題中的“Button1”改為“發(fā)送”,功能是按一次就把發(fā)送編輯框中的內(nèi)容發(fā)送一次C、為以上兩個編輯框添加變量,及串口通信控件一樣添加,為IDC_EDIT_RXDATA添加CString型變量m_strRXData;為IDC_EDIT_TXDATA添加CString型變量m_strTXData。說明:m_strRXData和m_strTXData分別用來放入接收和發(fā)送的字符數(shù)據(jù)。D、添加串口事件消息處理函數(shù)OnComm()打開ClassWizard->MessageMaps,選擇IDC_MSCOMM1,雙擊消息OnComm,將彈出的對話框中將函數(shù)名改為OnComm,(好記而已)OK。這個函數(shù)是用來處理串口消息事件的,如每當(dāng)串口接收到數(shù)據(jù),就會產(chǎn)生一個串口接收數(shù)據(jù)緩沖區(qū)中有字符的消息事件,我們剛才添加的函數(shù)就會執(zhí)行,我們在OnComm()函數(shù)加入相應(yīng)的處理代碼就能實現(xiàn)自已想要的功能了。在函數(shù)中加入如下代碼:提示1:此句以下才是我們要添加的語句代碼段1:提示1:此句以下才是我們要添加的語句voidCScommTestDlg::OnComm() //TODO:Addyourcontrolnotificationhandlercodehere VARIANTvariant_inp;//定義一個VARIANT類對象 COleSafeArraysafearray_inp;//定義一個COleSafeArray對象 LONGlen,k; BYTErxdata[2048];//設(shè)置BYTE數(shù)組AN8—intterthatisnotsigned. CStringstrtemp; if(m_ctrlComm.GetCommEvent()==2)//事件值為2表示接收緩沖區(qū)內(nèi)有數(shù)據(jù) ////以下你可以根據(jù)自己的通信協(xié)議加入處理代碼 variant_inp=m_ctrlComm.GetInput();//讀緩沖區(qū) safearray_inp=variant_inp;//VARIANT型變量轉(zhuǎn)換為ColeSafeArray型變量 len=safearray_inp.GetOneDimSize(); for(k=0;k<len;k++) safearray_inp.GetElement(&k,rxdata+k);//轉(zhuǎn)換為BYTE型數(shù)組提示2:此三句是下面用于是否是十六進(jìn)制發(fā)送的,暫時可以不用理會 for(k=0;k<len;k++)//將數(shù)組轉(zhuǎn)換為Cstring型變量提示2:此三句是下面用于是否是十六進(jìn)制發(fā)送的,暫時可以不用理會 BYTEbt=*(char*)(rxdata+k); //if(m_ctrlHexSend.GetCheck())//如果是HEX顯示則轉(zhuǎn)為16進(jìn)制 // strtemp.Format("%02x",bt); //將16進(jìn)制數(shù)送入臨時變量strtemp存放 // else strtemp.Format("%c",bt);//將字符送入臨時變量strtemp存放 m_strRXData+=strtemp;//加入接收編輯框?qū)?yīng)字符串 UpdateData(FALSE);//更新編輯框內(nèi)容(主要是接收編輯框中的)到目前為止還不能在接收編輯框中看到數(shù)據(jù),因為我們還沒有打開串口,但運行程序不應(yīng)該有任何錯誤,不然,你肯定哪兒沒看仔細(xì),因為我是打開VC6對照著做一步寫一行的,運行試試。沒錯吧?那么做下一步:E、打開串口和設(shè)置串口參數(shù)

你可以在你需要的時候打開串口,例如在程序中做一個開始按鈕,在該按鈕的處理函數(shù)中打開串口。現(xiàn)在我們在主對話框的CSCommTestDlg::OnInitDialog()打開串口,加入如下代碼:代碼段2:BOOLCSCommTestDlg::OnInitDialog() CDialog::OnInitDialog(); //Add"About..."menuitemtosystemmenu. //IDM_ABOUTBOXmustbeinthesystemcommandrange. ASSERT((IDM_ABOUTBOX&0xFFF0)==IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX<0xF000); CMenu*pSysMenu=GetSystemMenu(FALSE); if(pSysMenu!=NULL) CStringstrAboutMenu; strAboutMenu.LoadString(IDS_ABOUTBOX); if(!strAboutMenu.IsEmpty()) pSysMenu->AppendMenu(MF_SEPARATOR); pSysMenu->AppendMenu(MF_STRING,IDM_ABOUTBOX,strAboutMenu);提示3:此句以下才是我們要添加的語句 //Settheiconforthisdialog.Theframeworkdoesthisautomatically提示3:此句以下才是我們要添加的語句 //whentheapplication'smainwindowisnotadialog提示4:此5句是我們下面要用到的暫時可以不用理會 SetIcon(m_hIcon,TRUE); //Setbigicon提示4:此5句是我們下面要用到的暫時可以不用理會 SetIcon(m_hIcon,FALSE); //Setsmallicon //TODO:Addextrainitializationhere // m_ComboBox.SetCurSel(0);//打開軟件時串口選擇框默認(rèn)顯示COM1// m_BaudRate_M.SetCurSel(0);//打開軟件時波特率選擇框默認(rèn)顯示9600// m_Date_Select_M.SetCurSel(0);//打開軟件時數(shù)據(jù)位選擇框默認(rèn)顯示8// m_StopBit_M.SetCurSel(0);//打開軟件時停止位選擇框默認(rèn)顯示1// m_ParityCheck_M.SetCurSel(0);//打開軟件時奇偶校驗選擇框默認(rèn)顯示無校驗N //下面if語句用于打開默認(rèn)串口 if(m_ctrlComm.GetPortOpen()) m_ctrlComm.SetPortOpen(FALSE);//關(guān)閉串口 m_ctrlComm.SetCommPort(1);//打開軟件時默認(rèn)使用COM1串口 if(!m_ctrlComm.GetPortOpen()) m_ctrlComm.SetPortOpen(TRUE);//打開串口 else AfxMessageBox("cannotopenserialport"); m_ctrlComm.SetSettings("9600,n,8,1");//打開軟件時端口設(shè)置默認(rèn)為波特率9600,無校驗位,8位數(shù)據(jù),1位停止位 m_ctrlComm.SetInputMode(1);//1:表示以二進(jìn)制方式檢取數(shù)據(jù) m_ctrlComm.SetRThreshold(1);//參數(shù)1表示每當(dāng)串口接收緩沖區(qū)中有多于或等于1個字符時將引發(fā)一個接收數(shù)據(jù)的OnComm事件 m_ctrlComm.SetInputLen(0);//設(shè)置當(dāng)前接收區(qū)數(shù)據(jù)長度為0 m_ctrlComm.GetInput();//先預(yù)讀緩沖區(qū)以清除殘留數(shù)據(jù) returnTRUE;//returnTRUEunlessyousetthefocustoacontrolF、發(fā)送數(shù)據(jù),先為發(fā)送按鈕添加一個單擊消息即BN_CLICKED處理函數(shù),打開ClassWizard->MessageMaps,選擇IDC_BUTTON_MANUALSEND,雙擊BN_CLICKED添加OnButtonManualsend()函數(shù),并在函數(shù)中添加如下代碼:代碼段3:voidCSCommTestDlg::OnButtonManualsend()//TODO:AddyourcontrolnotificationhandlercodehereUpdateData(TRUE);//讀取編輯框內(nèi)容m_ctrlComm.SetOutput(COleVariant(m_strTXData));//發(fā)送數(shù)據(jù)此時運行程序,在發(fā)送編輯框中隨意輸入數(shù),單擊發(fā)送按鈕,若出錯則修改后再測試,直到成功再進(jìn)行以下操作。5、添加兩個“組框”或“靜態(tài)文本”控件,調(diào)整位置及大小,在標(biāo)師處輸入提示文字,這兩個控件不用編程,效果如下圖:6、添加5個“靜態(tài)文本”控件并由屬性修改其標(biāo)題,均不用編程,效果如下圖:7、添加5個“組框”控件,效果如下圖:逐一對各個組框?qū)傩跃庉嬋缦拢捍谔枺撼R?guī)ID:IDC_COMBO_CommSelect數(shù)據(jù)輸入列表框項目(N):COM1、COM2、COM3、COM4、COM5、COM6、COM7、COM8、COM9(注意每輸入一個數(shù)據(jù)選項以Ctrl+Enter回車后再輸入下一個數(shù)據(jù)選項)樣式將“分類勾選去掉”進(jìn)入類向?qū)砑幼兞浚瑸镮DC_COMBO_CommSelect添加一個value類int型變量m_Index,點擊OK后,再添加一個Control類CComboBox型變量m_ComboBox點擊OK最后“確定”波特率: 常規(guī)ID:IDC_COMBO_BaudRate_Select數(shù)據(jù)輸入列表框項目(N):9600、14400、19200、38400、56000、57600、115200、128000、256000樣式將“分類勾選去掉”進(jìn)入類向?qū)砑幼兞?,為IDC_COMBO_BaudRate_Select添加一個value類int型變量m_BaudRate點擊OK后,再添加一個Control類CComboBox型變量m_BaudRate_M點擊OK最后“確定”數(shù)據(jù)位: 常規(guī)ID:IDC_COMBO_Date_Select 數(shù)據(jù)輸入列表框項目(N):8、7、6、5、4樣式將“分類勾選去掉”進(jìn)入類向?qū)砑幼兞浚瑸镮DC_COMBO_Date_Select添加一個value類int型變量m_Date_Select點擊OK后,再添加一個Control類CComboBox型變量m_Date_Select_M點擊OK最后“確定”停止位: 常規(guī)ID:IDC_COMBO_StopBit 數(shù)據(jù)輸入列表框項目(N):1、2樣式將“分類勾選去掉”進(jìn)入類向?qū)砑幼兞?,為IDC_COMBO_StopBit添加一個value類int型變量m_StopBit點擊OK后,再添加一個Control類CComboBox型變量m_StopBit_M點擊OK最后“確定”奇偶校驗位:常規(guī)ID:IDC_COMBO_ParityCheck 數(shù)據(jù)輸入列表框項目(N):N、O、E、 樣式將“分類勾選去掉”進(jìn)入類向?qū)砑幼兞?,為IDC_COMBO_ParityCheck添加一個value類int型變量m_ParityCheck點擊OK后,再添加一個Control類CComboBox型變量m_ParityCheck_M點擊OK最后“確定”說明:以上數(shù)據(jù)配置添加的Control類CComboBox型變量可能用不到,但value類必須為int型8、為各個列表框添加處理函數(shù): A、在建立類向?qū)е蠱essageMaps,objectIDs中選中IDC_COMBO_CommSelect再在Messages中選中CBN_SELCHANG雙擊后單擊OK,再在Memberfuntions中雙擊剛才生成的函數(shù)進(jìn)入程序編輯頁面,添加程序代碼如下: 代碼段4: voidCSCommTestDlg::OnSelchangeCOMBOCommSelect() //TODO:Addyourcontrolnotificationhandlercodehere m_Index=((CComboBox*)GetDlgItem(IDC_COMBO_CommSelect))->GetCurSel();//當(dāng)前選中的行 ((CComboBox*)GetDlgItem(IDC_COMBO_CommSelect))->SetCurSel(m_Index);//設(shè)置當(dāng)前選中的行的內(nèi)容為顯示的內(nèi)容 if(m_ctrlComm.GetPortOpen())//當(dāng)要改變時則要先關(guān)閉串口才可以用按鍵進(jìn)行打開,所以先判斷當(dāng)前串口是否打開提示5:下面添加串口打開或關(guān)閉按鈕后將用到此將用到此判斷及以下語句 {//如果是打開的則先關(guān)閉提示5:下面添加串口打開或關(guān)閉按鈕后將用到此將用到此判斷及以下語句 m_ctrlComm.SetPortOpen(FALSE);//關(guān)閉串口 SetDlgItemText(IDC_BUTTON1,"打開串口");//將打開或關(guān)才按鈕改為"打開串口"顯示狀態(tài)B、同理為IDC_COMBO_BaudRate_Select添加處理函數(shù)程序代碼如下:代碼段5:voidCSCommTestDlg::OnSelchangeCOMBOBaudRateSelect() //TODO:Addyourcontrolnotificationhandlercodehere UpdateData(true); m_BaudRate=((CComboBox*)GetDlgItem(IDC_COMBO_BaudRate_Select))->GetCurSel();//當(dāng)前選中的行 ///根據(jù)當(dāng)前選中的值進(jìn)行波特率設(shè)置 switch(m_BaudRate) case1:m_ctrlComm.SetSettings("14400,,,"); break; case2:m_ctrlComm.SetSettings("19200,,,"); break; case3:m_ctrlComm.SetSettings("38400,,,"); break; case4:m_ctrlComm.SetSettings("56000,,,"); break; case5:m_ctrlComm.SetSettings("57600,,,"); break; case6:m_ctrlComm.SetSettings("115200,,,"); break; case7:m_ctrlComm.SetSettings("128000,,,"); break; case8:m_ctrlComm.SetSettings("256000,,,"); break; default:m_ctrlComm.SetSettings("9600,,,"); break;UpdateData(false);C、同理為IDC_COMBO_Date_Select添加處理函數(shù)程序代碼如下:代碼段6:voidCSCommTestDlg::OnSelchangeCOMBODateSelect() //TODO:Addyourcontrolnotificationhandlercodehere UpdateData(true); m_Date_Select=((CComboBox*)GetDlgItem(IDC_COMBO_Date_Select))->GetCurSel();//當(dāng)前選中的行switch(m_Date_Select) case1:m_ctrlComm.SetSettings(",,7,"); break; case2:m_ctrlComm.SetSettings(",,6,"); break; case3:m_ctrlComm.SetSettings(",,5,"); break; case4:m_ctrlComm.SetSettings(",,4,"); break; default:m_ctrlComm.SetSettings(",,8,"); break; UpdateData(false);D、同理為IDC_COMBO_StopBit添加處理函數(shù)程序代碼如下:代碼段6:voidCSCommTestDlg::OnSelchangeCOMBOStopBit() //TODO:Addyourcontrolnotificationhandlercodehere UpdateData(true); m_StopBit=((CComboBox*)GetDlgItem(IDC_COMBO_StopBit))->GetCurSel();//當(dāng)前選中的行switch(m_StopBit) case1:m_ctrlComm.SetSettings(",,,2"); break; default:m_ctrlComm.SetSettings(",,,1"); break;UpdateData(false);E、同理為IDC_COMBO_ParityCheck添加處理函數(shù)程序代碼如下:代碼段7:voidCSCommTestDlg::OnSelchangeCOMBOParityCheck() //TODO:Addyourcontrolnotificationhandlercodehere UpdateData(true); m_ParityCheck=((CComboBox*)GetDlgItem(IDC_COMBO_ParityCheck))->GetCurSel();//當(dāng)前選中的行switch(m_ParityCheck) case1:m_ctrlComm.SetSettings(",O,,"); break; case2:m_ctrlComm.SetSettings(",O,,"); break; default:m_ctrlComm.SetSettings(",N,,"); break; UpdateData(false);此時應(yīng)將代碼段2:提示4中所指的那5個語句前的“//”刪除9、串口添加打開或關(guān)閉按鈕 以同樣的方式添加按鈕,并將標(biāo)題修改為“關(guān)閉串口”字樣,為此按鈕添加處理函數(shù)程序代碼如下:代碼段8:voidCSCommTestDlg::OnButton1Start() //檢查是否改變默認(rèn)的串口值,沒有改變m_Index的值是0的,否則則不為0 if(m_Index<0)//串口的默認(rèn)值沒有改變 switch(m_ctrlComm.GetPortOpen())//點擊打開或關(guān)閉串口按鍵時,根據(jù)當(dāng)前串口是否打開進(jìn)行相應(yīng)操作 case1: /************************************************************** 關(guān)閉串口前先將自動發(fā)送功能關(guān)閉 SetDlgItemText(IDC_BUTTON_AutoSend,"自動發(fā)送");//更改按鍵指示 KillTimer(1); //當(dāng)前串口是打開的則進(jìn)行關(guān)串口操作 m_ctrlComm.SetPortOpen(FALSE);//關(guān)閉串口 SetDlgItemText(IDC_BUTTON1,"打開串口");//更改按鍵指示 UpdateData(FALSE);//更新按鍵狀態(tài) break; case0://當(dāng)前串口是關(guān)閉的則進(jìn)行開串口操作 m_ctrlComm.SetCommPort(1);//如果要打開串口則應(yīng)先選擇哪個串口 m_ctrlComm.SetPortOpen(TRUE);//打開串口 SetDlgItemText(IDC_BUTTON1,"關(guān)閉串口");//更改按鍵指示 UpdateData(FALSE); break; default:AfxMessageBox("cannotopenorcloseserialport"); else//串口的默認(rèn)值有改變 switch(m_ctrlComm.GetPortOpen())//點擊打開或關(guān)閉串口按鍵時,根據(jù)當(dāng)前串口是否打開進(jìn)行相應(yīng)操作 case0://當(dāng)前串口是關(guān)閉的則進(jìn)行開串口操作 m_ctrlComm.SetCommPort(m_Index+1);//如果要打開串口則應(yīng)先選擇哪個串口 m_ctrlComm.SetPortOpen(TRUE);//打開串口 SetDlgItemText(IDC_BUTTON1,"關(guān)閉串口");//更改按鍵指示 UpdateData(FALSE);//更新按鍵狀態(tài) break; case1:/************************************************************** 關(guān)閉串口前先將自動發(fā)送功能關(guān)閉 SetDlgItemText(IDC_BUTTON_AutoSend,"自動發(fā)送");//更改按鍵指示 KillTimer(1); //當(dāng)前串口是打開的則進(jìn)行關(guān)串口操作 m_ctrlComm.SetPortOpen(FALSE); SetDlgItemText(IDC_BUTTON1,"打開串口"); UpdateData(FALSE); break; default:AfxMessageBox("cannotopenserialport");if(m_Index<0)((CComboBox*)GetDlgItem(IDC_COMBO_CommSelect))->SetCurSel(0);//如果沒有另外進(jìn)行串口選擇則顯示COM1if(m_BaudRate<0)((CComboBox*)GetDlgItem(IDC_COMBO_BaudRate_Select))->SetCurSel(0);//如果沒有另外進(jìn)行波特率選擇則顯示9600if(m_Date_Select<0)((CComboBox*)GetDlgItem(IDC_COMBO_Date_Select))->SetCurSel(0);////如果沒有另外進(jìn)行數(shù)據(jù)位選擇則顯示8if(m_StopBit<0)((CComboBox*)GetDlgItem(IDC_COMBO_StopBit))->SetCurSel(0);//如果沒有另外進(jìn)行停止位選擇則顯示1if(m_ParityCheck<0)((CComboBox*)GetDlgItem(IDC_COMBO_ParityCheck))->SetCurSel(0);//如果沒有另外進(jìn)行校驗位選擇則顯示沒有校驗位N10、添加自動發(fā)送功能: A、添加一個“編輯框”控件,此控件用于獲取自動發(fā)送的時間間隔的,修改其ID為IDC_EDIT_Timer,為其添加一個value類UINT型變量m_Timer B、添加一個“按鈕”控件,修改其ID為IDC_BUTTON_AutoSend修改其標(biāo)題為“自動發(fā)送” C、添加一個“按鈕”控件,修改其ID為IDC_BUTTON_StopAutoSend修改其標(biāo)題為“停止自動發(fā)送” D、為“自動發(fā)送”按鈕添加BN_CLICKED處理函數(shù),程序代碼如下:代碼段9:voidCSCommTestDlg::OnBUTTONAutoSend() UpdateData(TRUE); if(m_Timer<=0)//判斷是否設(shè)置自動發(fā)送時間間隔 AfxMessageBox("請設(shè)置自動發(fā)送時間間隔"); elseif(!m_ctrlComm.GetPortOpen())//判斷是否打開串口 AfxMessageBox("請打開串口"); else {SetDlgItemText(IDC_BUTTON_AutoSend,"自動發(fā)送...");//更改按鍵指示 SetTimer(1,m_Timer,NULL);} E、為“停止自動發(fā)送”按鈕添加BN_CLICKED處理函數(shù),程序代碼如下:代碼段9:voidCSCommTestDlg::OnBUTTONStopAutoSend() //TODO:Addyourcontrolnotificationhandlercodehere SetDlgItemText(IDC_BUTTON_AutoSend,"自動發(fā)送");//更改按鍵指示 KillTimer(1); F、因為要設(shè)置自發(fā)送,所以要添加一個Windows定時函數(shù),步驟如下:進(jìn)入類向?qū)?,MessageMaps中的ObjectIDs中選擇CScommTestDlg再選擇Messages中的WM_TIMER,進(jìn)入TIMER函數(shù)后,添加如下程序代碼如下:代碼段10:voidCSCommTestDlg::OnTimer(UINTnIDEvent) //TODO:Addyourmessagehandlercodehereand/orcalldefault UpdateData(TRUE); if(m_ctrlHexSend.GetCheck()) CByteArrayhexdate; intlen=String2Hex(m_strTXData,hexdate); m_ctrlComm.SetOutput(COleVariant(hexdate)); else m_ctrlComm.SetOutput(COleVariant(m_strTXData)); CDialog::OnTimer(nIDEvent);11、十六進(jìn)制數(shù)據(jù)發(fā)送及接收顯示添加一個“復(fù)選框”控件,修改ID為IDC_CHECK_HexSend,標(biāo)題為“HEX發(fā)送”,進(jìn)入類向?qū)砑觕ontrol類CButton型變量,變量名為m_ctrlHexSend,然后為為SCommTestDlg類添加以下兩個PUBLIC成員函數(shù),在Classview中右擊CCommTestDlg選中AddMemberFunction…然后在函數(shù)類型中輸入“int”,在函數(shù)描述中輸入“String2Hex(CStringstr,CByteArray&senddate)”然后確定。編輯函數(shù)體如下:代碼段11:intCSCommTestDlg::String2Hex(CStringstr,CByteArray&senddate) inthexdate,lowhexdate; inthexdatelen=0; intlen=str.GetLength(); senddate.SetSize(len/2); for(inti=0;i<len;) charlstr,hstr=str[i]; if(hstr=='') i++; continue; i++; if(i>=len) break; lstr=str[i]; hexdate=ConvertHexChar(hstr); lowhexdate=ConvertHexChar(lstr); if((hexdate==16)||(lowhexdate==16)) break; else hexdate=hexdate*16+lowhexdate; i++; senddate[hexdatelen]=(char)hexdate; hexdatelen++; senddate.SetSize(hexdatelen); returnhexdatelen;再添加別一個CCommTestDlg添加兩個成員函數(shù),在函數(shù)類型中輸入“char”,在函數(shù)描述中輸入“ConvertHexChar(charch)”然后確定。編輯函數(shù)體如下:代碼段12:charCSCommTestDlg:

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論