针对整数的Spin控件使用

在Edit控件上面设置group属性(特别注意)——未验证
在Spin控件上设置

  • Auto Buddy 为 true ——自动和Edit Control绑定(自动关联控件为Tab序前一个)
  • Set Buddy Integer 为 true ——调整整数
  • Alignment 为 Right Align ——在Edit Control内靠右对齐,更美观
  • Wrap设置为true     ——若控件的增加或减小超过了结尾或开始,使数值可以循环


在OnInitDialog()中加入

   

  CSpinButtonCtrl * pSpinCtrl = (CSpinButtonCtrl *)GetDlgItem(IDC_SPIN1);
    pSpinCtrl->SetRange(0,128);
    pSpinCtrl->SetBuddy(GetDlgItem(IDC_EDIT_WEIGHT));
    pSpinCtrl->SetBase(10);
    pSpinCtrl->SetPos(100);

  

当Edit改变时,SpinCtrl也随着改变

void CComDlgDlg::OnChangeEditWeight() 
{
    m_ulWeight = GetDlgItemInt(IDC_EDIT_WEIGHT); 
    CSpinButtonCtrl * pSpinCtrl = (CSpinButtonCtrl *)GetDlgItem(IDC_SPIN1);
    pSpinCtrl->SetPos(m_ulWeight);
}

  

另外一些需要注意的细节:

  • checkbox属于CButton

    ((CButton*)GetDlgItem(IDC_CHECK1))->SetCheck(check?TRUE:FALSE);
  • 如果不设定Range,向上从100开始减小。向下从1开始增大。体验非常不好。
  • 为了设定Range:

    ((CSpinButtonCtrl*)GetDlgItem(IDC_SPIN10))->SetRange(0,100); 

    其中GetDlgItem(IDC_SPIN1)得到的是HANDLE,要调用setRange函数还需要将

    HWND转化为指针。

  • GetDlgItem()函数在OnInitDialog函数里使用是不存在任何问题的,不

    会因为该类正处于初始化过程(在Initial函数中),有的控件没有初始化完而
    产生内存或指针问题。如果出现内存访问错误,多半是访问了不存在的控件。
    或是别的原因。


参考资料:

posted on 2011-08-31 18:09  LateStop  阅读(1386)  评论(0)    收藏  举报

导航