CSpinButtonCtrl 调节小数

来源:互联网 发布:网络新词语 编辑:程序博客网 时间:2024/04/28 03:43

CSpinButtonCtrl 调节小数

在程序中,CSpinButtonCtrl控件和CEdit控件组合大多数只支持控制正整数,而我们在应用中经常需要CSpinButtonCtrl每次被按下能增加或减少的值为小数,如0.1,同时显示在一个CEdit伴侣控件中,如何实现?最近自己刚好用上,提供两种我试过的方法。下次提供一个完整的封装类。

方法1

相应窗口消息消息ON_WM_VSCROLL();添加如下代码即可

void CAlongWallDlg::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值

if(nSBCode==SB_ENDSCROLL)
return;
if(pScrollBar->GetDlgCtrlID()==IDC_MYSPIN)
{
CString str;
CSpinButtonCtrl* pSpinBtCtrl=(CSpinButtonCtrl*)pScrollBar;
pSpinBtCtrl->GetBuddy()->GetWindowText(str);
int pos=_wtoi(str);
str.Format(_T("%2.1f"),(double)pos/10);
((CSpinButtonCtrl*)pScrollBar)->GetBuddy()->SetWindowText(str);
}

CAdUiDialog::OnVScroll(nSBCode, nPos, pScrollBar);
}

方法2,自己编写一个继承于CSpinButtonCtrl的类 重写鼠标左键点击事件,概要操作如下:

void CMySpinButtonCtrl::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值

CString strNum;
double retVal = 0.0;
CMySpinButtonCtrl::GetBuddy()->GetWindowText(strNum);
if ( g_IsNumber(strNum) ==FALSE ) //g_IsNumber函数在底下定义

MessageBox(_T("请输入合法的数字"));
return;
}
else
{
CRect Rect;
CMySpinButtonCtrl::GetWindowRect (&Rect);

if(point.y <((Rect.bottom-Rect.top)/2))
{
retVal = atof((LPCSTR)(LPCTSTR)strNum)+baseNum; 
}
else
{
retVal = atof((LPCSTR)(LPCTSTR)strNum)-baseNum;
}
CString showVal;
showVal.Format(_T("f%"),retVal);
CMySpinButtonCtrl::GetBuddy()->SetWindowText(showVal);

}

CSpinButtonCtrl::OnLButtonDown(nFlags, point);
}
//====================================================
//输入参数:一个CString格式的数据
//功能:判断一个数据是否有效的double类型
//输出参数:一个表示数据有效性的Boolean
//说明:该函数自己随便编写,仅供参考用的,不能保证完全正确
//=====================================================

Boolean CMySpinButtonCtrl::g_IsNumber(CString strNum)
{
int num = 0;
for (int i=0; i<strNum.GetLength();i++)
{
if (strNum[i]=='.')
{
num++;
}
if (strNum[i]<'0'&&strNum[i]!='.')
{
return FALSE;
}
else if (strNum[i]>='9')
{
return FALSE;
}
}

if (num > 1)
{
return FALSE;
}
else if( num > 0)
{
if (strNum[0]=='.'||strNum[strNum.GetLength()-1]=='.')
{
return FALSE;

}
return TRUE;
}

//转载自:http://blog.sina.com.cn/s/blog_4ac0a0d30100cy4h.html

原创粉丝点击