MFC中串列埠類的使用

2021-07-23 11:52:05 字數 4333 閱讀 8380

串列埠控制項

//自動獲取串列埠:

voidcenvvar_configdlg::getcom()

//程式啟動時獲取全部可用串列埠

handle  hcom;

int i,num,k;

cstring str;

bool flag;

((ccombobox *)getdlgitem(idc_combo_com))->resetcontent();

flag = false;

num = 0;

for (i = 1;i <= 16;i++)

{//此程式支援16個串列埠

str.format("\\\\.\\com%d",i);

hcom = createfile(str, 0, 0, 0, open_existing, file_attribute_normal,0);

if(invalid_handle_value != hcom )

{//能開啟該串列埠,則新增該串列埠

closehandle(hcom);

str = str.mid(4);

((ccombobox *)getdlgitem(idc_combo_com))->addstring(str);

if (flag == false)

flag = true;

num = i;

i= ((ccombobox *)getdlgitem(idc_combo_com))->getcount();

if (i == 0)

{//若找不到可用串列埠則禁用「開啟串列埠」功能

((ccombobox *)getdlgitem(idc_combo_com))->enablewindow(false);

else

k = ((ccombobox *)getdlgitem((idc_combo_com)))->getcount();

((ccombobox *)getdlgitem(idc_combo_com))->setcursel(k - 1);

//響應函式

void cenvvar_configdlg::ononcommmscomm1()

//todo: add your control notification handler code here

variantvariant_inp;

colesafearraysafearray_inp;

longlen,k;

//byterxdata[2048]; //設定byte陣列 an 8-bit integerthat is not signed.

byterxdata[4096];

cstringstrtemp;

if(m_comm1.getcommevent()==2)//事件值為2表示接收緩衝區內有字元

variant_inp=m_comm1.getinput();//讀緩衝區

safearray_inp=variant_inp;//variant型變數轉換為colesafearray型變數

len=safearray_inp.getonedimsize();//得到有效資料長度

for(k=0;ksafearray_inp.getelement(&k,rxdata+k);//轉換為byte型陣列

for(k=0;kbytebt=*(char*)(rxdata+k); //字元型

strtemp.format("%c",bt);//將字元送入臨時變數strtemp存放

m_editrxdata+=strtemp;//加入接收編輯框對應字串

updatedata(false);//更新編輯框內容

m_editrxctrl.linescroll(m_editrxctrl.getlinecount()-1,0);  //讓顯示到當前列印行

//開啟串列埠:

void cenvvar_configdlg::onbtnopen()

//todo: add your control notification handler code here

staticbool x=false;

intcomport = 0;   

intbaudrate = 0;  

intcomportindex = 0;  

//intbaudrateindex = 0;  

cstringdata;

inti;

i= ((ccombobox *)getdlgitem(idc_combo_com))->getcursel();

((ccombobox*)getdlgitem(idc_combo_com))->getlbtext(i,data);

data= data.mid(3);

i= atoi(data);

comport= i;

//comportindex= m_comport.getcursel();

//comport= comportindex+1;   //序號加1 剛好為串口號

//baudrate= 115200;

if(!x)

x= true;

getdlgitem(idc_btnopen)->setwindowtext("關閉串列埠");

if(m_comm1.getportopen())

m_comm1.setportopen(false);

m_comm1.setcommport(comport);//選擇com1,可根據具體情況更改

m_comm1.setinbuffersize(4096);//設定輸入緩衝區的大小,bytes

m_comm1.setoutbuffersize(4096);//設定輸入緩衝區的大小,bytes//

m_comm1.setsettings("115200,n,8,1");//波特率9600,無校驗,8個資料位,1個停止位

m_comm1.setinputmode(1);//1:表示以二進位制方式檢取資料

m_comm1.setrthreshold(1);//引數1表示每當串列埠接收緩衝區中有多於或等於1個字元時將引發乙個接收資料的oncomm事件

m_comm1.setinputlen(0);//設定當前接收區資料長度為0

if(!m_comm1.getportopen())

m_comm1.setportopen(true);//開啟串列埠

afxmessagebox("    串列埠開啟成功!");

else

m_comm1.getinput();//先預讀緩衝區以清除殘留資料

afxmessagebox("    串列埠已開啟!");

else

x=false;

getdlgitem(idc_btnopen)->setwindowtext("開啟串列埠");

m_comm1.setportopen(false);

afxmessagebox("    串列埠已關閉!");

#if0

if(m_comm1.getportopen())

m_comm1.setportopen(false);

m_comm1.setcommport(comport);//選擇com1,可根據具體情況更改

m_comm1.setinbuffersize(1024);//設定輸入緩衝區的大小,bytes

m_comm1.setoutbuffersize(1024);//設定輸入緩衝區的大小,bytes//

m_comm1.setsettings("115200,n,8,1");//波特率9600,無校驗,8個資料位,1個停止位

m_comm1.setinputmode(1);//1:表示以二進位制方式檢取資料

m_comm1.setrthreshold(1);//引數1表示每當串列埠接收緩衝區中有多於或等於1個字元時將引發乙個接收資料的oncomm事件

m_comm1.setinputlen(0);//設定當前接收區資料長度為0

if(!m_comm1.getportopen())

m_comm1.setportopen(true);//開啟串列埠

afxmessagebox("openserial port success!");

else

m_comm1.getinput();//先預讀緩衝區以清除殘留資料

afxmessagebox("open serial port failed!");

#endif

updatedata(false);

//傳送函式:

cstring dec_envvar[10];

cmscomm       m_comm1;

m_comm1.setoutput(colevariant(dec_envvar[i]));

基於MFC的串列埠類CSerialPort的使用

基於mfc的串列埠類cserialport的使用 1 在dlg.件中新增標頭檔案 include cserialport.h 2 在dlg.件中定義串列埠類 public cserialport m serialport 定義串列埠類3 在dlg.件中定義串列埠類的實現函式 afx msg long...

MFC中陣列類的使用分析

出處 vckbase 2006 07 22 05 00 mfc的陣列類支援的陣列類似於c 中的常規陣列,可以存放任何資料型別。mfc的陣列類支援的陣列類似於c 中的常規陣列,可以存放任何資料型別。c 的常規陣列在使用前必須將其定義成能夠容納所有可能需要的元素,而mfc陣列類建立的物件可以根據需要動態...

mfc使用動態庫中類的問題

編譯動態庫的時候,一般會生成靜態庫和動態庫,可以像使用靜態庫一樣 pragma comment lib,x.lib 這樣比 typedef void fun hmodulehdll loadlibrary x.dll funfp1 fun getprocaddress hdll,funname1 i...