CSpinButtonCtrl 是vc中的spin控件,“旋转按钮控件”(也称为上下控件)是一对箭头按钮,用户点击它们来增加或减小某个值。一个旋转控件通常是与一个相伴的控件一起使用的,这个控件称为“伙伴窗口”。一个旋转按钮控件可以自动定位在它的伙伴窗口的旁边,看起来就像一个单一的控件。
OnInitDialog函数中设置控件数值范围:
SetRange(0,255);
通常,将一个旋转按钮控件与一个编辑控件一起使用,以提示用户进行数字输入。点击向上箭头使当前位置向最大值方向移动,而点击向下箭头使当前位置向最小值的方向移动。缺省时,最小值是100,最大值是0,当用户点击向上箭头则减少数值,而点击向下箭头则增加它,这看起来就像颠倒一样,因此我们还需使用成员函数CSpinButtonCtrl::SetRange来改最大和最小值。
(1)旋转按钮控件常用的风格 参考属性页
(2)旋转按钮控件的基本操作
基本操作包括基数、范围、位置设置和获取,分别说明如下:
成员函数SetBase是用来设置其基数的,其原型如下:
int SetBase(int nBase);
此成员函数用来设置一个旋转按钮控件的基数.这个基数值决定了伙伴窗口显示的数字是十进制的还是十六进制的.十六进制的数总是无符号的;十进制的数是有符号的.如果成功则返回先前的基数值,
获取一个旋转按钮控件的基数的成员函数:UINT GetBase()const;
成员函数SetPos、SetRange是用来设置一个旋转按钮控件的当前位置和范围,其原型如下:
int SetPos(int nPos);
void SetRange(int nLower,int nUpper);
int GetPos()const;
void GetRange(int& lower,int& upper)const;
旋转按钮控件的通知消息
旋转按钮控件的通知消息只有一个:UDN_DELTAPOS,它表示控件的位置将要改变。
用ClassWizard可以映射此消息,在此消息的处理函数中有个NM_UPDOWN结构
typedef struct _NM_UPDOWN{
NMHDR hdr; //通知代码的其他信息
int iPos; //当前位置
int iDelta; //位置的增减量,单击向上箭头此值为负数
}NMUPDOWN,FAR* LPNMUPDOWN;
应用实例:用Spin控件完成对字符的增减
void CTestDlg::OnDeltaposSpin3(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_UPDOWN* pNMUpDown = (NM_UPDOWN*)pNMHDR;
if(pNMUpDown->iDelta == 1) //点击了Spin的往下箭头
{
}
else if(pNMUpDown->iDelta == -1) //点击了Spin的往上箭头
{
}
*pResult = 0;
}
1: 假设你编辑框为IDC_EDIT , SPIN按钮为IDC_SPIN .
2: Ctrl + W , 进入Class Wizard , 在Object IDs列选择IDC_SPIN , 在Messages列选择UDN_DELTAPOS , 点击"Add Function" 按钮.将弹出"OnDeltaposSpin"的对话框 ,点OK 添加这个函数.然后点"Edit Code" , 进入新添加的函数里 .
3: 将会新添加一个函数.
void CTestDlg::OnDeltaposSpin(NMHDR* pNMHDR, LRESULT* pResult) . . .
4: 添加如下代码:
void CTestDlg::OnDeltaposSpin(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_UPDOWN* pNMUpDown = (NM_UPDOWN*)pNMHDR;
CWnd* pWnd = (CWnd*)GetDlgItem(IDC_EDIT); CString strValue ;
pWnd->GetWindowText(strValue);
if(pNMUpDown->iDelta == 1) {
if(!strValue.IsEmpty())
{
strValue.SetAt(0 , strValue[0] + 1); pWnd->SetWindowText(strValue); } }