MFC小笔记:上下控件

一、需求

上下控件实际上是由edit控件和spin控件组成的,共2个控件。为方便描述,称为上下控件,即可以点击spin控件上下按钮增减数值,当通过上下按钮操作时,edit控件中同时显示数值的变化。另外,也可以在edit控件中直接输入数值。

二、设计

  • 1、排放edit控件和spin控件。
  • 2、设置spin控件属性:
    • Auto Buddy为True,按钮控件顺序进行关联。否则无法关联。
    • Set Buddy Interger为True,当spin控件变化时,变化的数值在合作者(即edit控件)中显示。
    • Alignment为Right Align,一般习惯在右边。
  • 3、在资源视图中,按Ctrl+D重新排序,edit和spin控件必须相邻,才能成为Buddy。比如edit1为1,spin1必须为2,edit2为3,spin2为4,等等。

三、编码

在对话框OnInitDialog函数进行初始化:

1
2
3
4
5
6
7
8
9
10
11
// 如果有多个上下控件,可如下初始化:
int nDlgItem[] = { IDC_SPIN_UP, IDC_SPIN_DOWN, IDC_SPIN_LEFT, IDC_SPIN_RIGHT };
CSpinButtonCtrl* pSpin = NULL;

for (int i = 0; i < 4; i++)
{
pSpin = (CSpinButtonCtrl*)GetDlgItem(nDlgItem[i]);
pSpin->SetRange(0, 10); // 范围0~10
pSpin->SetBase(10); // 十进制
pSpin->SetPos(i); // 设置默认显示的值,仅测试
}

在初始化时,设置了显示数值的范围(下限可以是负数),数值进制以及默认值。当向上按钮超过上限时,无法再增长,反之亦然。另外,edit控件输入超过上限数值时亦会变成上限值。

在需要获取其值的响应函数中处理:

1
2
3
4
5
6
CString szInfo;
CSpinButtonCtrl* pSpin = NULL;
pSpin = (CSpinButtonCtrl*)GetDlgItem(IDC_SPIN_UP); // 获取控件
int pos1 = pSpin->GetPos(); // 获取值
szInfo.Format(L"pos: %d", pos1);
GetDlgItem(IDC_STC_TIPS)->SetWindowTextW(L"value: "+ szInfo);