建立了一个对话框类Dialog2,Dialog2.h中声明了消息处理函数:
afx_msg LONG OnCommunication(WPARAM ch, LPARAM port);Dialog2.cpp中定义消息映射:BEGIN_MESSAGE_MAP(Dialog2, CDialog)
//{{AFX_MSG_MAP(Dialog2)
ON_MESSAGE(WM_COMM_RXCHAR, OnCommunication)
ON_WM_TIMER()
ON_BN_CLICKED(IDC_OFP_INSTRUCT, OnOfpInstruct)
ON_BN_CLICKED(IDC_SAVE_LOG, OnSaveLog)
ON_BN_CLICKED(IDC_SELECT_ALL, OnSelectAll)
ON_BN_CLICKED(IDC_OFP_TEST, OnOfpTest)
ON_BN_CLICKED(IDC_MCARD_TEST, OnMcardTest)
ON_BN_CLICKED(IDC_ICC_TEST, OnIccTest)
ON_BN_CLICKED(IDC_RFIC_TEST, OnRficTest)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()LONG Dialog2::OnCommunication(WPARAM ch, LPARAM port)
{
AfxMessageBox("communicated!");
return 0;
}OnCommunication函数是响应串口收到的字符,运行的时候也用bushound监控了串口数据:
Bus Hound 5.00 capture. Complements of www.perisoft.net  Device - Device ID (followed by the endpoint for USB devices)
            (18) 通讯端口 (COM1)
  Phase  - Phase Type
            DI    Data in                    
            DO    Data out                   
  Data   - Hex dump of the data transferred
  Descr  - Description of the phase
  Cmd... - Position in the captured data
Device  Phase  Data                      Description       Cmd.Phase.Ofs(rep)
------  -----  ------------------------  ----------------  ------------------
  18    DO     1b 79 1b 78  36 30 30 33  .y.x6003                 1.1.0        
               31 37 30 32  30 30 37 36  17020076                 1.1.8        
               03                        .                        1.1.16       
  18    DI     36                        6                        2.1.0        
  18    DI     30                        0                        3.1.0(2)     
  18    DI     31                        1                        5.1.0        
  18    DI     30                        0                        6.1.0(2)     
  18    DI     36                        6                        8.1.0        
  18    DI     31                        1                        9.1.0        
  18    DI     03                        .                       10.1.0        
  18    DO     36 30 30 33  31 37 30 30  60031700                11.1.0        
               34 35 33 31  03           4531.                   11.1.8        
  18    DI     36                        6                       12.1.0        
  18    DI     30                        0                       13.1.0(2)     
  18    DI     32                        2                       15.1.0        
  18    DI     30                        0                       16.1.0(2)     
  18    DI     34                        4                       18.1.0        
  18    DI     35                        5                       19.1.0        
  18    DI     32                        2                       20.1.0        
  18    DI     37                        7                       21.1.0        
  18    DI     03                        .                       22.1.0        
  18    DO     36 30 30 31  31 31 37 30  60011170                23.1.0        
               03                        .                       23.1.8        
  18    DI     36                        6                       24.1.0        
  18    DI     30                        0                       25.1.0(2)     
  18    DI     31                        1                       27.1.0        
  18    DI     30                        0                       28.1.0(2)     
  18    DI     36                        6                       30.1.0        
  18    DI     31                        1                       31.1.0        
  18    DI     03                        .                       32.1.0        
  18    DO     36 30 30 31  31 37 37 36  60011776                33.1.0        
               03                        .                       33.1.8        
  18    DI     36                        6                       34.1.0        
  18    DI     30                        0                       35.1.0(2)     
  18    DI     37                        7                       37.1.0        
  18    DI     30                        0                       38.1.0(3)     
  18    DI     34                        4                       41.1.0        
  18    DI     30                        0                       42.1.0        
  18    DI     32                        2                       43.1.0        
  18    DI     30                        0                       44.1.0(8)     
  18    DI     36                        6                       52.1.0        
  18    DI     31                        1                       53.1.0        
  18    DI     03                        .                       54.1.0        
  18    DO     36 30 30 31  31 32 37 33  60011273                55.1.0        
               03                        .                       55.1.8        
  18    DI     36                        6                       56.1.0        
  18    DI     30                        0                       57.1.0(2)     
  18    DI     45                        E                       59.1.0        
  18    DI     30                        0                       60.1.0(2)     
  18    DI     33                        3                       62.1.0        
  18    DI     42                        B                       63.1.0        
  18    DI     37                        7                       64.1.0        
  18    DI     38                        8                       65.1.0        
  18    DI     31                        1                       66.1.0        
  18    DI     33                        3                       67.1.0        
  18    DI     30                        0                       68.1.0(6)     
  18    DI     37                        7                       74.1.0        
  18    DI     33                        3                       75.1.0        
  18    DI     43                        C                       76.1.0        
  18    DI     38                        8                       77.1.0        
  18    DI     34                        4                       78.1.0        
  18    DI     30                        0                       79.1.0        
  18    DI     31                        1                       80.1.0        
  18    DI     33                        3                       81.1.0        
  18    DI     30                        0                       82.1.0(2)     
  18    DI     39                        9                       84.1.0        
  18    DI     30                        0                       85.1.0(3)     
  18    DI     34                        4                       88.1.0        
  18    DI     36                        6                       89.1.0        
  18    DI     03                        .                       90.1.0        
  18    DO     36 30 30 44  31 35 30 30  600D1500                91.1.0        
               41 34 30 34  30 30 30 37  A4040007                91.1.8        
               41 30 30 30  30 30 30 33  A0000003                91.1.16       
               33 33 30 31  30 31 34 46  3301014F                91.1.24       
               03                        .                       91.1.32       
  18    DI     36                        6                       92.1.0        
  18    DI     30                        0                       93.1.0(2)     
  18    DI     33                        3                       95.1.0        
  18    DI     45                        E                       96.1.0        
  18    DI     37                        7                       97.1.0        
  18    DI     36                        6                       98.1.0        
  18    DI     31                        1                       99.1.0        
  18    DI     34                        4                      100.1.0        
  18    DI     37                        7                      101.1.0        
  18    DI     41                        A                      102.1.0        
  18    DI     32                        2                      103.1.0        
  18    DI     03                        .                      104.1.0        很奇怪的是,明明有收到数据,却始终不弹出对话框,为什么OnCommunication函数不能得到执行呢?
求各位大侠指点!

解决方案 »

  1.   

    发消息是通过一个CButton控制的:
    ON_BN_CLICKED(IDC_OFP_TEST, OnOfpTest)    //这个是Message map里的void Dialog2::OnOfpTest() 
    {
    pTestDlg = (CMy7115_TESTDlg*)GetParent(); if(CPublic::m_Port.m_hComm==NULL)
    {
    AfxMessageBox("串口没有打开,请打开串口");
    // pTestDlg->m_ctrlIconOnOff.SetIcon(pTestDlg->m_hIconOff);
    return;
    } if(CPublic::m_Port.InitPort(pTestDlg, CPublic::m_nCom, CPublic::m_nBaud, CPublic::m_cParity, CPublic::m_nDatabits, CPublic::m_nStopbits, CPublic::m_dwCommEvents, BufSize))
    {
    CPublic::m_Port.StartMonitoring();
    if(!(T6806.GetCheck()))
    {
    m_ctrlTestLog.SetWindowText("++++++++++++++++++++++++请勾选您需要测试的OFP指令++++++++++++++++++++++++");
    SetTimer(1, 1000, NULL);
    return;
    }
    if(T6806.GetCheck())
    {
    while(bTesting)
    {}
    bTesting=TRUE;
    CurOfp=6806;
    _6806(SW);
    }
    }
    else
    {
    AfxMessageBox("没有发现此串口");
    // pTestDlg->m_ctrlIconOnOff.SetIcon(pTestDlg->m_hIconOff);
    return;
    }
    }
      

  2.   

    顺便求解一个小问题:
    定义了一个CSting strOfpInstruct="OFP操作指令说明\n\n6806: 6807:\n\n6809: 6810:\n";
    以及一个CEidt m_ctrlTestLog;
    执行以下代码:
    m_ctrlTestLog.SetWindowText(m_strLog);
    UpdateData(TRUE);
    return;
    出来的结果复制到记事本后是这样:为什么\n不能正确得到回车?
      

  3.   

    没看到你代码里哪里发了消息。
    CEdit的属性是否为多行?
      

  4.   

    发消息的代码如下:
    int Dialog2::_6828(long SW)
    {
    SW=0000;
    transf="1B 79 1B 78 36 30 30 33 31 37 30 32 30 30 37 36 03";
    int len=CPublic::Str2Hex(transf,data);
    CPublic::m_Port.WriteToPort(data,len);
    SetTimer(2,800,NULL); //设置定时器800ms
    return SW;
    }CEdit属性为Multiline。
      

  5.   

    1、如果要响应消息,起码要有发送消息,比如:PostMessage或SendMessage
    2、如果是控件内部发出的消息,检查一下你是否把正确的窗体句柄传给了控件