利用MFC编写了基于对话框的界面,在界面对话框有增加了两个对话框,一个是串口接收的对话框MSCComm控件,另一个对话框是负责显示数据的。我在显示对话框中增加了一个串口类的指针,指向串口类中定义的一个数组元素,但是数据却显示不出来这时怎么回事啊?恳请各位帮帮忙?我很郁闷!!!高了一周了没有解决!!!

解决方案 »

  1.   

    一个是CPort类另一个是CShow类,在CPort类使用CMCComm控件,接收数据函数:
    void CPortDlg::OnOnCommMscomm1() 
    {
    // TODO: Add your control notification handler code here
    int nEvent=0;
    VARIANT  variant_inp;
    COleSafeArray  safearray_inp;
    LONG k,len;
    BYTE rxdata[2048];
    CString strtemp;
    CString t[10];//,t1,n[5];

    //char  a[10];
    //CWorkStatusDlg  *pWork;
    nEvent=m_ctrlComm.GetCommEvent();
    switch(nEvent)
    {
    case 2:
    variant_inp = m_ctrlComm.GetInput();
    safearray_inp = variant_inp;
    len = safearray_inp.GetOneDimSize();
    for(k=0;k<len;k++)
     safearray_inp.GetElement(&k,rxdata+k);//转换成BYTE型数组

    for(k=0;k<len;k++)
    {
    BYTE bt=*(char*)(rxdata+k);    //字符型
    //if(m_ctrlHEXDISPLAY.GetCheck())

    strtemp.Format("%02X",bt);   //将字符以十六进制的形式送入临时变量strtemp存放,注意这里加上你一个空格

    //else
    // strtemp.Format("%c",bt);       t1=t1+strtemp;    //加入接收编辑框对应的字符串
         //m_Receive+=strtemp;
          //添加数据协议头判断  if(bt ==0xfe)
      {
            char* pStr = new char[ t1.GetLength() + 1 ] ;
                        pStr = t1.GetBuffer(t1.GetLength());
                        for (int i = 0; i < 10; i++)
                          t[i].Format("%c", pStr[i]);
                          for (int j = 0; j < 5; j++)
                            {
                                n[j] = t[j*2]+t[j*2+1];
    n[j] = HexToDecimal(n[j]);
                                m_Receive += n[j]+"\r\n";//在这里还是字符形式                    
                            }  
    for(int p = 0;p<5;p++)
    {
    WorkData[p]=atoi(n[p]);
    }

    //MessageBox(itoa(WorkData[1],a,10));
    }

    }


      default:  break;
    } UpdateData(false);
    }数据已经被处理成十进制的正数,我在显示类中加了一个定时器函数来显示:
    void CShow::OnTimer(UINT nIDEvent) 
    {
    // TODO: Add your message handler code here and/or call default


    m_varWorkV=m_pPort1->WorkData[0];
    m_varWorkI +=1;
        
    UpdateData(false);
    CDialog::OnTimer(nIDEvent);
    }
    m_varWorkV这个在编辑框里面显示是0,m_varWorkI 这个在编辑框里面就动态加1;
    m_pPort1->WorkData[0];没有把数据传过来?还是有其他原因?我很郁闷!!求救啊
      

  2.   

    把 WorkData 定义为静态吧,m_pPort1::WorkData[0] 调用
      

  3.   

    存放数据的声明成全局的,或者公有的
    公有的:CShow类中声明存放数据的类的对象,然后调用
    全局的:extern ,然后使用