请问:为什么在主对话框下已经打开的串口,在子对话框中却没有打开呢。
也就是在子对话框中对串口进行读写操作时,串口仍是关闭的,而在主对话框中这个串口确实已被打开了。在vc下,怎么才能做到串口一旦被打开,无论在什么对话框下都可以对串口进行操作,直到我把它关闭为止,请各位指点。
在线等待。在这先谢谢各位兄弟!

解决方案 »

  1.   

    子对话框是通过AnimateWindow方法的动画效果得来的,我电脑的串口连着一个下位机,在子对话框中有几个按钮是用来对下位机发指令的。可是现在我在主对话框中打开了串口,可是在子对话框下却没打开,所以我的指令也发不下去了。
      

  2.   

    void CWsjcDlg::OnOpenComm() 
    {
    // TODO: Add your control notification handler code here
    char cParity;
    switch(m_Parity) 
    {
    case NOPARITY:    
    cParity = 'N';
    break;
    case ODDPARITY:
    cParity = 'O';
    break;
    case EVENPARITY:
    cParity = 'E';
    break;
    case MARKPARITY:
    cParity = 'M';
    break;
    case SPACEPARITY:
    cParity = 'S';
    break;
    default:;
    }
    DWORD dwCommEvents = EV_RXCHAR;
    m_Ports.InitPort(this, m_Serial+1,atoi(m_BaudRate),cParity,atoi(m_DataBits),
    m_StopBits+1,
    dwCommEvents,
    atoi(m_SendBuffer));
    m_Ports.StartMonitoring();
    }
      

  3.   

    BOOL CSerialPort::StartMonitoring()
    {
    if (!(m_Thread = AfxBeginThread(CommThread, this)))
    return FALSE;
    TRACE("Thread started\n");
    return TRUE;
    }
      

  4.   

    用exrern声名成全局的就可以了
      

  5.   

    我刚才调试,我觉得我的问题出在初始化串口这里: m_Ports.InitPort(this, m_Serial+1,atoi(m_BaudRate),cParity,atoi(m_DataBits),m_StopBits+1,dwCommEvents,atoi(m_SendBuffer));
    就是这里的这个this指标,它只是指向主对话框,所以在子对话框不能用,如果真是这样的话,那么该怎么改呢?
      

  6.   

    把 m_Ports声明为全局变量或 主窗口的公有成员变量,以保证在子窗口中可用。
    至于第一个参数实际上是串口消息目的窗口的指针,就是说有消息的话发到它指
    的那个窗口。