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
- CSpinButtonCtrl 调节小数
- CSpinButtonCtrl 调节小数
- CSpinButtonCtrl控件处理小数的问题
- CSpinButtonCtrl
- CSpinButtonCtrl
- CSpinButtonCtrl控件 控制小数,指定步长,指定类型数据
- CSpinButtonCtrl实例
- CSpinButtonCtrl使用说明
- CSpinButtonCtrl用法
- CSpinButtonCtrl用法
- CSpinButtonCtrl使用说明
- CSpinButtonCtrl用法
- CSpinButtonCtrl使用说明
- CSpinButtonCtrl使用说明
- CSpinButtonCtrl控件
- CSpinButtonCtrl使用说明
- CSpinButtonCtrl使用
- CSpinButtonCtrl使用说明
- 32位程序如何在WIN64位下运行
- JSP多文件上传,动态添加文件选择框和按钮,并添加事件
- JS中的prototype
- std::list 错误使用的地方
- widnows下利用api获取IP地址,mac地址等网络信息
- CSpinButtonCtrl 调节小数
- 关于Binder线程池
- Resharper
- ibatis dynamic
- ExtJS4新发现09_xtype的含义以及对应类
- Java Socket对象数据传输
- 统计单源最短路径的条数 (DFS+Dijstra算法)和记忆化搜索
- 对mysql数据库_登陆_的理解
- Go-简洁的并发