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); } }