九、PWIN98/95下演练CSpin
(一)旋转按钮控制的主要功能
旋转按钮控制(Spin Button Control)又称为上下控制(Up Down Control),其主要功能是利用一对标有相反方向箭头的小按钮,通过点击它来在一定范围内改变当前的数值。旋转按钮控制的当前值通常显示在一个称为伙伴窗口(Buddy Window)的控制中,可以是一个编辑框等。
与其它控制一样,可以通过设置旋转按钮的风格来控制其显示外观。其风格如下:
UDS_HORZ 旋转按钮是水平方向的
UDS_VERT 旋转按钮是垂直方向的
UDS_ALIGNLEFT 旋转按钮位于伙伴窗口的左侧
UDS_ALIGNRIGHT 旋转按钮位于伙伴窗口的右侧
UDS_AUTOBUDDY 把旋转按钮的伙伴窗口设置为对话框中的顺序控制,即TAB顺序前一个控 制
UDS_SETBUDDYINT 旋转按钮当前值改变时自动改变伙伴窗口标题所显示的数值
UDS_NOTHOUSANDS 取消显示的数字中每三位间的“,”分隔符
UDS_WRAP 旋转按钮的当前值超出最大(最小)值时自动回绕到最小(最大)值
UDS_ARROWKEYS 可以让用户用光标键来改变当前值
旋转按钮也可以不在伙伴窗口的任何一侧。如果位于伙伴窗口的一侧,应适当减少伙伴窗口的宽度以容纳下旋转按钮。
旋转按钮控制在MFC类库中被封装为CSpinButtonCtrl类,其操作主要是获取和设置旋转按钮的变化范围、当前数值、伙伴窗口、伙伴窗口显示当前数据的数值基十进制还是十六进制和用户按住按钮时数值变化速度的加速度等。SetRange()函数用来设置范围,SetPos()函数用来设置当前位置。
(二)旋转按钮控制的对象结构
1、旋转按钮控制的建立方法
CspinButtonCtrl &SpinButtonCtrl 建立旋转按钮控制对象结构
Create 建立旋转按钮控制对象并绑定对象
旋转按钮控制类CSpinButtonCtrl::Create的调用格式如下:
BOOL Create( DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID );
其中参数dwStyle用来确定旋转按钮控制的风格;参数rect用来确定旋转按钮控制的大小和 位置;参数pParentWnd用来确定父窗口指针;参数nID用来确定旋转按钮的控制符ID值。
2、旋转按钮控制的类属性
旋转按钮控制的类属性包括设置加速键SetAccel、取得加速键GetAccel、设置基数SetBase、取得基数GetBase、设置伙伴窗口SetBuddy、取得伙伴窗口GetBuddy、设置当前位置SetPos、取得当前位置GetPos、设置上限下限值SetRange和取得上限下限值GetRange等。
(三)旋转按钮控制的应用技巧示例
1、利用应用程序向导AppWizard生成基于对象框的应用程序CSpinDlg;
2、在对话框中设置旋转按钮控制和编辑框控制,其ID分别为IDC_SPIN和IDC_EDIT;
在对话框初始代码中增加控制的范围和位置:
(1)在SpinDlg.h中设置数据成员,用来表示旋转按钮的步长值:
//SlidDlg.h
class CSlidDlg:public Cdialog
{ ......//其它代码
public:
int m_nStep;
......//其它代码
}
(2)在SpinDlg.cpp中设置初始状态
BOOL CSlidDlg::OnInitDialog()
{ Cdialog::OnInitDialog();
......//其它代码
//TODO:Add extra initialization here
CSpinButtonCtrl *pSpinCtrl=(CSpinButtonCtrl*)GetDlgItem(IDC_SPIN);
pSpinCtrl->SetRange(-50,50);//设置旋转按钮范围
pSpinCtrl->SetPos(10);//设置旋转按钮位置
......//其它代码
return TRUE;
}
(3)完善旋转按钮的消息处理,利用类向导ClassWizard增加对编辑框的EN_CHANGE消息处理函数,以使伙伴窗口编辑框的数据随着旋转按钮一起变化:
void CSPinDlg::OnChangeEdit()
{ //TODO:Add your message handler?
m_nStep=GetDlgItemInt(IDC_EDIT);
......//进行其它处理
}