针对整数的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函数中),有的控件没有初始化完而
产生内存或指针问题。如果出现内存访问错误,多半是访问了不存在的控件。
或是别的原因。
参考资料:
浙公网安备 33010602011771号