使用Win32 API实现限制编辑框输入的功能
2012-02-04 08:16
639 查看
使用C++Win32API实现了编辑框输入限制的功能,限制用户只能在编辑框中输入指定的内容,例如:只能输入数字0~9。当然,可以通过编辑框的属性限制编辑框只能输入数字,但是有时需要限制的内容不仅仅是数字,例如:一个输入时间的编辑框,输入格式为“2012-2-3 18:00:00”,限制的内容就不仅仅包含数字了。
解决思路:
1.当编辑框中的内容发生变化时,会发送一个EN_CHANGE消息;
2.当窗口响应函数捕捉到指定编辑框发送的EN_CHANGE消息时,读取指定编辑框里的内容;
3.判断读取的内容中是否包含非限定的字符;
4.如果包含非限定的字符,获得其位置,将其删除;并将该位置后面的字符依次向前移动;
5.重新设置输入焦点。
//窗口响应函数 LRESUL TCALLBACK ProjectProc (HWND hWnd,UINT uMessage,WPARAM wParam,LPARAM lParam) { case WM_COMMAND: { switch(LOWORD(wParam)) { case iResourceID://编辑框的资源ID { switch(HIWORD(wParam)) { case EN_CHANGE: { //限制输入框只能输入0123456789 EditControlLimit(hWnd,iResouceID,"0123456789"); } break; } } } } } //限制输入函数 void EditControlLimit(HWND hWnd,int iResouceID,char *szLimit) { int iPos=-1; //记录非限定字符位置 int iLength=SendMessage(GetDlgItem(hWnd,iResouceID),WM_GETTEXTLENGTH,0,0);//获得编辑框的长度 if(iLength!=0) { char *szContent=new char[iLength+1]; //分配缓冲区,存储编辑框内容 SendMessage(GetDlgItem(hWnd,iResouceID),WM_GETTEXT,iLength+1,(LPARAM)szContent); //获得编辑框内容 //判断缓冲区中是否包含非限定字符 for(int i=0;i<iLength;i++) { //判断是包含非限定字符,如果包含,则记录非限定字符位置 for(int j=0;j<strlen(szLimit);j++) { iPos=i; if(szContent[i]==szLimit[j]) { iPos=-1; break; } } //如果存在非限定字符 if(iPos!=-1) { //将非限定字符后的所有字符,向前依次复制 for(int k=i;k<=iLength;k++) { szContent[k]=szContent[k+1]; } //重设编辑框内容以及光标位置 SendMessage(GetDlgItem(hWnd,iResouceID),WM_SETTEXT,0,(LPARAM)szContent); SendMessage(GetDlgItem(hWnd,iResouceID),EM_SETSEL,iPos,iPos); break; } } //删除缓冲区 delete []szContent; szContent=NULL; } }
通过这种方法实现的限制编辑框输入的功能,会出现当输入非限定内容时,非限定内容会先在编辑框中出现,然后又消失这种现象。
针对限制编辑框输入这种功能,是否还有更好的解决方案,有待进一步学习。
相关文章推荐
- Jquery使用tbody编辑功能实现table输入计算功能
- unity实现简单的加密使用次数限制时间限制功能
- vba使用win32 API(GetOpenFileName )实现打开文件对话框
- c#不使用系统api实现可以指定区域屏幕截屏功能
- 使用 HTML5 webSocket API实现即时通讯的功能
- 在MOSS2007实现了Form认证后,无法使用SharePoint Designer来实现编辑功能。
- Azure 认知服务 (5) 计算机视觉API - 使用C#代码实现读取图片中的文字(OCR)功能
- 使用Repeater实现类似GridView编辑功能
- 使用Repeater实现类似GridView编辑功能
- EditText实现输入限制和校验功能实例代码
- 使用DataList实现 加入购物车,编辑,删除,更新,取消功能。
- 使用jquery 实现 仿google 的智能提示输入框功能 (改进版本)
- Win32 API 函数大全使用详解十 鼠标输入函数
- Android基于各官方API实现分享功能(不使用第三方集成工具)
- Win32 API 函数大全使用详解十 鼠标输入函数
- 使用DataList实现 加入购物车,编辑,删除,更新,取消功能。
- VB 使用API实现INET功能
- 关于DevExpress.XtraTreeList.TreeList控件的使用——给TreeList添加RepositoryItem以实现文本编辑功能
- unity实现简单的加密使用次数限制时间限制功能
- 用Python 实现刷钻网上抢任务,并实现一个简单的限制使用时间的功能