串列埠控制項
//自動獲取串列埠:
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...