我有一个对话框,上面有一个slider控件和一个edit控件,通过滑动slider上面的滑块来改变edit控件中显示的值(变量是CString类型的),这个没有问题。我现在想在另一个类中使用这个edit控件当前的值,为什么传递过来的总是初始值(我为edit控件设了一个初始值,也就是说,在改变slider之前显示在edit控件中的值)?下面是一些相关的代码// 对话框中
  m_edit = 27; //构造函数中设初始值    
  // 通过拖动滑块来改变edit中显示的值
  void CPageDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)  
  {
      // TODO: Add your message handler code here and/or call default
      CSliderCtrl *slider = (CSliderCtrl*)pScrollBar;
      m_edit = slider->GetPos();
      UpdateData(FALSE);      CDialog::OnHScroll(nSBCode, nPos, pScrollBar);
  }
  // 将要被另一个类调用的函数
  int CPageDlg::Threshold()
  {   
       return m_edit;
  }
// 另一个类中
  CPageDlg page; // 为类CPageDlg创建一个对象page
  // 调用Threshold函数,m是int类型的变量
  if (m > page.Threshold()) // 问题是为什么page.Threshold()总是27,它不应该是当前edit中显示的数据么?
  {
  ........
  }原因我基本上已经知道,我需要在调用它之前UpdateData(TRUE)一下,但是由于这个对话框中不止一个控件,所以UpdateData
会引起breakpoint,实在不知道要如何解决这个问题,请高手帮帮忙啊!我写了一个简单的测试程序,不知道有没有高手愿意提供邮箱帮我看一看。真的谢谢了!
  

解决方案 »

  1.   

    CPageDlg page;
    CString str;
    page.GetDlgItem(edit_it)->GetWindowText(str);
      

  2.   

    1楼你好,谢谢你的回答,这种方法我已经试过了,它只使用于控制型的变量,可是我这里的m_edit是int类型的,所以还是会出错的。
      

  3.   

    1楼,我把m_edit改成控制类型,然后用你的方法,还是报错
      

  4.   

    CPageDlg page; // 为类CPageDlg创建一个对象page
    ==========
    你这个对话框类有对应的实际对话框吗?
      

  5.   

    你的m_edit与Edit控件是否关联?如果正常关联的话,在Slider控件的响应函数中UpdateData(FALSE)已经将现在的值更新到了Edit控件,所以在Edit控件中看到了变化的值,而这时m_edit的值就是控件中看到的值,即使是在别的类中进行调用也是对的,我写了程序实验过的。[email protected],我给你看看吧~~
      

  6.   

    5楼你好,m_edit与Edit控件确定是关联的,因为我将slider的当前值赋给m_edit,然后UpdateData(FALSE),是可以显示到控件中的。
    然后非常感谢你的热心,邮件已经发给你了。
      

  7.   

    那你的代码在调用page.Threshold()之前,能否保证UpdateData(FALSE);一定已经被调用了呢?
      

  8.   

    回复8楼
    UpdateData(FALSE),我是用来将m_edit的值显示到edit控件中,这个我已经实现了。我现在希望在另一个类中通过调用Threshold函数来传递m_edit的值,问题是传递过来的总是初始值27.