面对现实,超越自己
逆水行舟,不进则退
posts - 269,comments - 32,trackbacks - 0

在MFC开发过程中使用ComboBox,有时会根据需求要求只能输入数字,并且要求数字在一定的范围内,例如一个用于选择小时的ComboBox,时间范围为00到23,那么该如何实现?

代码如下:

在Dialog.h中: 
…… 
CComboBox m_cbHour;// 声明CComboBox类型作为CDialog类的成员变量 
…… 
afx_msg void OnCbnEditchangeCbHour(); 
afx_msg void OnCbnEditupdateCbHour();

在Dialog.cpp中: 
…… 
DDX_Control(pDX, IDC_CB_HOUR, m_cbHour);// 数据交换 
…… 
ON_CBN_EDITCHANGE(IDC_CB_HOUR, &CDialog::OnCbnEditchangeCbHour)//添加消息映射,用于CComboBox内容改变中 
ON_CBN_EDITUPDATE(IDC_CB_HOUR, &CCDialog::OnCbnEditupdateCbHour)//添加消息映射,用于CComboBox内容更新 
…… 
下面来具体实现函数: 
image 
循环遍历CComboBox中已经输入的字符如果发现含有非数字则,置为“00”,使用循环的目的是为了防止用户跳着输(大概只有测试人员才会跳着输)。
将for循环改为for (int i = 0; i < (strTmp.GetLength()); i++)遇到非数字字符就设置为00;

image 
当CComboBox更新数据时判断数字范围,如果超过边界,则设置值为最近边界值,至此一个只接受可控范围数字的CComboBox就完成了,但是在WinCE开发中却有一个问题,就是所有的汉字都输不进去,但是“头”这个汉字却能输入,不知道这是不是一个BUG,如果在代码中对“头”做特别判断,那这段程序也太奇怪了!

本文转自:
http://blog.csdn.net/wyunteng/article/details/6370882

posted on 2013-09-25 17:39 王海光 阅读(3407) 评论(1)  编辑 收藏 引用 所属分类: MFC

FeedBack:
# re: MFC COMBOX控件只接受数字和设置数字范围
2016-07-08 16:50 | zju_cfb
ch是wchar_t类型,也就是unsigned short,为两个字节,而isdigit函数接受的是char类型,为一个字节,中间会有wchar_t转char的一个过程,导致把“头”这个汉字误判为一个数字(数字的ASCII码为48~57)。
把代码中的 if(!isdigit(ch)) 改为 if(!(ch>=48 && ch<=57)) 就不会出现“头”这个汉字了。  回复  更多评论
  

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理