小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

VC上應(yīng)用mscomm控件

 JohnnyChan 2009-07-11

1。建立mfc工程,都會(huì)撒。
   將控件加進(jìn)來:打開“Project->Add To Project->Components and Controls->Registered Activex Controls”,然后選擇控件:Microsoft Communication Control,version 6.0插入到當(dāng)前的工程中。這樣就將類 CMSComm 的相關(guān)文件 mscomm.cpp 和 mscomm.h 一并加入到了工程中。編程時(shí)只需將控件對(duì)話中的 MSComm 控件拖至你的應(yīng)用對(duì)話框中就OK了

2。定義串口對(duì)象:
    CMSComm      m_MSComm;

3。串口初始化:
  
DWORD style=WS_VISIBLE;
m_MSComm.Create(NULL,style,CRect(0,0,0,0),this,IDC_MSCOMM);
if(m_MSComm.GetPortOpen()) //如果串口是打開的,則行關(guān)閉串口
{
m_MSComm.SetPortOpen(FALSE);
}
m_MSComm.SetCommPort(1); //選擇COM1
m_MSComm.SetInBufferSize(1024); //接收緩沖區(qū)
m_MSComm.SetOutBufferSize(1024);//發(fā)送緩沖區(qū)
m_MSComm.SetInputLen(0);//設(shè)置當(dāng)前接收區(qū)數(shù)據(jù)長(zhǎng)度為0,表示全部讀取
m_MSComm.SetInputMode(1);//以二進(jìn)制方式讀寫數(shù)據(jù)
m_MSComm.SetRThreshold(1);//接收緩沖區(qū)有1個(gè)及1個(gè)以上字符時(shí),將引發(fā)接收數(shù)據(jù)的OnComm事件
m_MSComm.SetSettings("9600,n,8,1");//波特率9600無檢驗(yàn)位,8個(gè)數(shù)據(jù)位,1個(gè)停止位
if(!m_MSComm.GetPortOpen())//如果串口沒有打開則打開
m_MSComm.SetPortOpen(TRUE);//打開串口
else
{
m_MSComm.SetOutBufferCount(0);
AfxMessageBox("Open The Serial Port 1 Failurre!");
}


4。串口數(shù)據(jù)讀寫:

   MSComm 類的讀寫函數(shù)比較簡(jiǎn)單:GetInput()和SetOutput()。函數(shù)原形分別為VARIANT GetInput()和void SetOutput(const VARIANT newValue),均使用VARIANT類型。但PC機(jī)發(fā)送和接收數(shù)據(jù)時(shí)習(xí)慣用字符串形式。MSDN中查閱VARIANT類型,可以用BSTR表示字符 串,但所有的BSTR都包含寬字符,而只有Windows NT支持寬字符,Windows 9X并不支持。所以要完成一個(gè)適應(yīng)各平臺(tái)的串口應(yīng)用程序必須解決這個(gè)問題。這里使用CbyteArray即可解決之。

發(fā)數(shù)據(jù):在對(duì)話框?qū)尤?按鈕 控件并給你添加消息
   void CTest_mscommDlg::OnSend()
{
// TODO: Add your control notification handler code here
int i,Count;
CString m_SendData;
m_SendData="Hello!";
Count=m_SendData.GetLength();
CByteArray m_Array;

m_Array.RemoveAll();
m_Array.SetSize(Count);

for(int i =0; i<count; i++)
{
   m_Array.SetAt(i, m_SendData.GetAt(i));
}

m_mscomm.SetOutput(COleVariant(m_Array);

}


收數(shù)據(jù):給串口控件添加消息
void CTest_mscommDlg::OnOnCommMscomm()
{
VARIANT m_input;
char *str,*str1;
int k,nEvent,i;
CString str2,m_RcvData;
nEvent=m_MSComm.GetCommEvent();
switch(nEvent)
{
case 2:
   k=m_MSComm.GetInBufferCount();     //接收緩沖區(qū)的字符數(shù)目
   if(k>0)
   {
    m_input=m_MSComm.GetInput();
    str=(char*)(unsigned char*)m_input.parray->pvData;
   }
   i=0;
   str1=str;
   while(i

m_disp+=m_RcvData;

UpdateData(false);



}

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多