我响应了CSpinButtonCtrl的UDN_DELTAPOS事件,在事件里使用getpos,发现得到的值比spin控件上显示的值总是延迟一个呢?比如我不知道何故,请大侠指点~~

解决方案 »

  1.   

    问题已解决,在CSpinButtonCtrl控件的UDN_DELTAPOS事件响应的时候,尚未对控件的位置进行更改,只有函数执行结束后,返回0值,才能做出更改,如果想在UDN_DELTAPOS响应函数OnDeltaposRow中得到已更新的值,需要根据原值ipos和修改变量iDelta计算:
    void CMyDlg::OnDeltaPosMySpin(NMHDR *pNMHDR, LRESULT *pResult)
    {
       LPNMUPDOWN pNMUpDown = reinterpret_cast<LPNMUPDOWN>(pNMHDR);
       // TODO: 在此添加控件通知处理程序代码
       *pResult = 0;
       short curpos = pNMUpDown->iPos+pNMUpDown->iDelta;
       MessageBox("Current position: %d",curpos);
    }
      

  2.   

    但上述方法还有一个问题,在边界的时候可能出现range之外的值。如range设置为(0,100),某时刻spin的值为0,继续点击下三角符号,会弹出对话框:Current position: -1;回过头来发现spin 的显示是100(正常),但我希望得到的是 弹出对话框 :Current positon:100呀!用个判断大概可以解决,不过请问有没有比较常规的做法啊?
      

  3.   

    常规做法是。给控件绑定个变量。在用到的地方直接Updatadata。就可以直接使用了