• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • 在基于單文檔(SDI)程序中應用MSCOMM串口通訊控件

    發表于:2007-07-14來源:作者:點擊數: 標簽:
    1.利用MFC向導建立基于單文檔應用程序SDIComm,所有步驟缺省,在項目中插入MSCOMM控件(Project-Add to Project-Components and Control...-Registered Active Controls-Mcriosoft Commmunications Control,V6.0,單擊INSERT,OK; 2.SDICommView.h處理: 首先
    1.利用MFC向導建立基于單文檔應用程序SDIComm,所有步驟缺省,在項目中插入MSCOMM控件(Project->Add to Project->Components and Control...->Registered Active Controls->Mcriosoft Commmunications Control,V6.0,單擊INSERT,OK;


    2.SDICommView.h處理:
    首先加入#include "mscomm.h";
    然后在//{{AFX_MSG(CSDICommView)和//}}AFX_MSG之間加入以下兩行:
    afx_msg void OnComm();
    DECLARE_EVENTSINK_MAP()
    最后結果是:
    //{{AFX_MSG(CSDICommView)
    afx_msg void OnComm(); //事件處理函數
    DECLARE_EVENTSINK_MAP()
    //}}AFX_MSG
    再加入CMSCOMM類PUBLIC對象定義:
    CMSComm m_MSComm;


    3.利用CLASSWIZARD為CSDICommView類添加WM_CREATE函數,該函數在視窗初始化時執行。方法是在 CLASSWIZARD中選擇MESSAGE MAP卡,在OBJECT IDS中選擇CSDICommView,在MESSAGES中選擇WM_CREATE,雙擊添加int CSDICommView::OnCreate(LPCREATESTRUCT lpCreateStruct)函數
    int CSDICommView::OnCreate(LPCREATESTRUCT lpCreateStruct)
    {
    if (CView::OnCreate(lpCreateStruct) == -1)
    return -1;

    // TODO: Add your specialized creation code here
    m_MSComm.Create(NULL,0,CRect(0,0,0,0),this,IDC_MSCOMM1);
    if(m_MSComm.GetPortOpen()) //如果串口是打開的,則行關閉串口
    m_MSComm.SetPortOpen(FALSE);

    m_MSComm.SetCommPort(2); //選擇COM2
    m_MSComm.SetInBufferSize(1024); //接收緩沖區
    m_MSComm.SetOutBufferSize(1024);//發送緩沖區
    m_MSComm.SetInputLen(0);//設置當前接收區數據長度為0,表示全部讀取
    m_MSComm.SetInputMode(1);//以二進制方式讀寫數據
    m_MSComm.SetRThreshold(1);//接收緩沖區有1個及1個以上字符時,將引發接收數據的OnComm事件
    m_MSComm.SetSettings("9600,n,8,1");//波特率9600無檢驗位,8個數據位,1個停止位

    if(!m_MSComm.GetPortOpen())//如果串口沒有打開則打開
    m_MSComm.SetPortOpen(TRUE);//打開串口
    else
    AfxMessageBox("Open Serial Port Failure!");
    m_MSComm.GetInput(); //先預讀緩沖區以清除殘留數據

    return 0;
    }

    在這個函數中 我們應該注意m_MSComm.Create(NULL,0,CRect(0,0,0,0),this,IDC_MSCOMM1);一句,其功能是初始化串口類對象m_MSComm,這在基于對話框中的程序是由CLASSWIZARD自動完成的。注意IDC_MSCOMM1還是源于對話框中的控件ID規則,而且IDC_MSCOMM1必須與串口控件對應,在這里我們最好利用一個對話框,直接將控件拖入對話框中,就可以省不少事,這里我們利用ABOUT對話框,方法如下:

    在ResoureView中選擇IDD_ABOUTBOX對話框,將控件圖標拖入對話框中。
               


    到目前為止,我們還未完成串口接收數據事件的初始化,還需進行以下步驟:


    4.串口接收數據事件的初始化:在SDICommView.cpp文件中加入以下事件驅動說明:
    BEGIN_EVENTSINK_MAP(CSDMSCom1View, CView)
    //{{AFX_EVENTSINK_MAP(CAboutDlg)
    ON_EVENT(CSDMSCom1View, IDC_MSCOMM1, 1 /* OnComm */, OnComm, VTS_NONE)
    //}}AFX_EVENTSINK_MAP
    END_EVENTSINK_MAP()

    手工添加函數oncomm():
    在函數中我們作這樣的測試處理,每當有OnComm事件,就向串口發送數據"OK,I've received some data!\r\n",順便提一下,在串口通訊程序中,一般的通訊處理均在oncomm()函數中處理。
    void CSDICommView::OnComm()
    {
    // TODO: Add your control notification handler code here
    CString strtemp;
    strtemp.Format("OK,I've received some data!\r\n");
    m_MSComm.SetOutput(COleVariant(strtemp));//發送數據
    }


    最后是測試程序后,編譯運行后,可將串口調試助手V2.1(或其它調試工具)設置在COM1,9600,n,8,1,單擊手動發送,就可以看到效果了。

    原文轉自:http://www.kjueaiud.com

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>