各位高手,我在对话框中加入了一个CSpinButtonCtrl控件,关联了一个CSpinButtonCtrl类对象m_spinbtn,没有初始化该对象,因为我不会用其成员函数Create()中的第二个参数CRect。
我在该控件的响应函数OnDeltaposSpin1()中应该怎样编程,才能使我在按向上向下箭头时增加或减小该CSpinButtonCtrl控件的buddy窗口(是一个静态文本窗口,我已经设好了)中的数值呢?我增加了如下语句:
         m_spinbtn.SetRange(0,255);
m_spinbtn.SetPos(100);
但运行时没有任何反应。请问是不是我初始化有问题,如果是的,那个CRect参数应怎样设置?或者,在响应函数里还要增加哪些语句?呵呵,问题可能比较简单,但我是初学者,还望各位高手详细指教!

解决方案 »

  1.   

    在控件属性中选择“Set Buddy Integer”。
      

  2.   

    顺便提一下控件类中的Create函数是创建一个控件(并与该对象建立关联),不是初始化对象。对象与控件关联有两种方法,一种是用VC给控件添加关联变量,另一种是调用SubclassDlgItem。
      

  3.   

    我按照二楼讲的在控件属性中选择了“Set Buddy Integer”,又按照一楼的下了个控件的例子,看了看,并作修改如下:
    利用类向导在微调按钮上新建了一个类CMySpinButtonCtrl,基类为CSpinButtonCtrl,响应了它的OnLButtonDown函数,并添加代码如下:
    void CMySpinButtonCtrl::OnLButtonDown(UINT nFlags, CPoint point) 
    {
    // TODO: Add your message handler code here and/or call default
    int nRow;
    int nUpper;
    CMySpinButtonCtrl::GetRange(nRow,nUpper);
            CString strNum;
    CMySpinButtonCtrl::GetBuddy()->GetWindowText(strNum);
    CRect Rect;
    CMySpinButtonCtrl::GetWindowRect (&Rect);
    int pos = atoi(strNum);
    if(point.y <((Rect.bottom+Rect.top)/2))
    {
    CMySpinButtonCtrl::SetPos(pos-1);
    }
    else
    {
    CMySpinButtonCtrl::SetPos(pos + 1);   
    }

    CSpinButtonCtrl::OnLButtonDown(nFlags, point);
    }
    但点击仍没有任何反应,请高手继续指点!
    前面我讲过我将CSpinButtonCtrl控件的buddy窗口设为一个静态文本控件,没有反应。后来我将此控件换成了Edit控件,还是没有反应。真的不知道问题出在哪了!?
      

  4.   

    如果没有特殊要求,只是使用Spin Button控件,不需要派生类,也不用响应消息。只要选择“Set Buddy Integer”,设置Buddy、Range、Pos即可。Buddy也可以是静态文本控件。
      

  5.   

    非常感谢cnzdgs!!!我这个没有特殊要求,说具体点吧,现在主要是做一个MIDI播放器,在一个静态文本控件中显示其节拍,然后利用微调控件设置其节拍,不过暂时我还在学怎样利用微调控件改变其Buddy窗口中的整数。
    我按照你的建议,删去了派生类及响应消息,选择了“Set Buddy Integer”,然后在Play按钮的消息响应函数OnPlay()中添加了如下代码(m_spinbtn是与CSpinButtonCtrl控件相关联的一个CSpinButtonCtrl类对象):
    m_spinbtn.SetBuddy(GetDlgItem(IDC_TEMPO));
    m_spinbtn.SetRange(0,255);
    m_spinbtn.SetPos(100);
    运行后,发现第一次点击向上箭头时数字变101,第一次点向下箭头时数字变99,但再次点击箭头数字就没有变化了。
     然后我将第三条语句改为:
    m_spinbtn.SetPos(m_Midi.GetTempo());(参数为得到MIDI文件的节拍数函数),再运行。
    此时,当点击Play按钮时显示出正常的节拍数(当时那个节拍是135),但当第一次点击向上箭头时数字又变101,第一次点向下箭头时数字变99,并不是在135的基础上加减1.而且再次点击箭头数字就没有变化了。我不知道问题出在哪了,请高手指点!!
      

  6.   

    我又作了如下修改:在微调控件上增加了一个消息处理函数OnDeltaposSpin1(),以响应UDN_DELTAPOS消息,将OnPlay()函数中的三条语句
    m_spinbtn.SetBuddy(GetDlgItem(IDC_TEMPO)); 
    m_spinbtn.SetRange(0,255);
    m_spinbtn.SetPos(m_Midi.GetTempo()); 
    移到了OnDeltaposSpin1()函数中,但点击上下箭头时数字仍只能改变一次,而且有时改变的幅度没有规律。
      呵,小弟我茫然了!!
      

  7.   

    回复cnzdgs:
     我把这个问题单独拿出来做试验,发现你讲的完全可行。现已修改源程序,按微调按钮可以改变数字了!再次表示感谢!!!
     程序还有一些问题,但涉及到其他方面,我再摸索一下,不懂再提问!!