如题:我想用WM_COMM_TXEMPTY_DETECTED来判断接收结束,怎么不能用呢?
书上说WM_COMM_TXEMPTY_DETECTED消息表示串口发送文件完毕,但实现不了啊 
afx_msg LONG OnComClose(WPARAM ch,LPARAM port); 
ON_MESSAGE(WM_COMM_TXEMPTY_DETECTED, OnClose)
LONG CReadData::OnComClose(WPARAM ch,LPARAM port)
{
MessageBox("数据接收完毕");
}
大侠帮我解决一下问题啊,最近我被串口缠绕。。极度晕中!!!!

解决方案 »

  1.   

    函数Onclose里面还有一句return 0;
      

  2.   

    ::SendMessage((port->m_pOwner)->m_hWnd, WM_COMM_TXEMPTY_DETECTED, (WPARAM) RXBuff, (LPARAM) port->m_nPortNr); 
      

  3.   

    楼上,你说的是WriteChar里的这句话么?我把这句话填上了,但是他说我RXBuff没有定义,于是我有定义了一下unsigned char RXBuff;结果还是不行,MessageBox("数据接收完毕");还是弹不出提示框。请大侠明示
      

  4.   

    SerialPort类源代码分析
    http://blog.csdn.net/benny_cen/archive/2009/03/29/4033517.aspx
      

  5.   

    不是说当缓冲区中最后一个被发送完毕后就会自动发送响应WM_COMM_TXEMPTY_DETECTED么,然后就去执行我设置的ON_MESSAGE(WM_COMM_TXEMPTY_DETECTED, OnComClose)里的OnComClose函数。我是仿照龚建伟的书里介绍的ON_MESSAGE(WM_COMM_RXCHAR, OnCommunication)方法写的。
      

  6.   

    WM_COMM_TXEMPTY_DETECTED这个消息,在串口类里就声明了啊~
    #define WM_COMM_TXEMPTY_DETECTED WM_USER+9
      

  7.   

    我添加了|EV_TXEMPTY在这句里m_Port.InitPort(this, index, 9600,'N',8,1,EV_RXFLAG | EV_RXCHAR|EV_TXEMPTY,512)。
    然后在类里添加了
     if   (CommEvent  &  EV_TXEMPTY)   
    ::SendMessage(port->m_pOwner->m_hWnd, WM_COMM_TXEMPTY_DETECTED, (WPARAM) 0, (LPARAM) port->m_nPortNr);  
    再然后就只要一传输数据就显示“数据接收完毕”,就接收不到数据了。把这两句注释掉后就传输正常了,只是传输完成后没有显示“数据接收完毕”。真的是晕死我了!!!!!!!
      

  8.   

    我试过m_dwCommEvents = EV_RXFLAG | EV_RXCHAR | EV_TXEMPTY;运行后接收不到数据,去掉EV_TXEMPTY,才能正常接收,说明不能同时设置EV_RXFLAG | EV_RXCHAR | EV_TXEMPTY三个事件,我说的对吗?请大侠指教