`
yangyou230
  • 浏览: 1649878 次
文章分类
社区版块
存档分类

VC++ 编辑框只输入数字

 
阅读更多
子类化CEdit为CNewEdit;处理CNewEdit的消息WM_CHAR。其中
void CNewEdit::OnChar(UINT nChar, UINTnRepCnt, UINT nFlags) 如下;
其它需要可以灵活定制。

void CNewEdit::OnChar(UINT nChar, UINTnRepCnt, UINT nFlags)
{
<wbr>if(nChar==VK_BACK)//BackSpace<br><wbr><wbr>CEdit::OnChar(nChar, nRepCnt,nFlags);<br><wbr><wbr><wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr>//////////////////////////////////////////////////////////////////<br><wbr>//Some invariable parameter for further use<br><wbr>CPoint caretPt;<br><wbr>caretPt=GetCaretPos ();<br><wbr>caretPt.x = LOWORD (CharFromPos (caretPt));//Thefunction is the core,I'm blind to seek it for 3 days</wbr></wbr></wbr></wbr></wbr>

<wbr>CString str;<br><wbr>int nLength;<br><wbr>int nDot;<br><wbr>int neE;<br><wbr>double fabstr;<br><wbr>GetWindowText (str);<br><wbr>fabstr=fabs(atof(str));<br><wbr><wbr><wbr>nLength=str.GetLength();<br><wbr>nDot=str.Find(_T('.'));<br><wbr>neE=max(str.Find('e'),str.Find('E'));<br><wbr><br><wbr><br><wbr><br><wbr>//////////////////////////////////////////////////////////<br><wbr>//Input 0-9,especialy 0 needs moreattention.</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr>if (isdigit(nChar))<br><wbr>{<br><wbr><wbr>if(nChar&gt;'0')<wbr><br><wbr><wbr>CEdit::OnChar(nChar, nRepCnt,nFlags);</wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr><wbr>else//make use of '0'<br><wbr><wbr>{<br><wbr><wbr><wbr>if(str.IsEmpty())<br><wbr><wbr><wbr>{<br><wbr><wbr><wbr><wbr>CEdit::OnChar(nChar,nRepCnt, nFlags);<br><wbr><wbr><wbr><wbr>return;<br><wbr><wbr><wbr>}<br><wbr><wbr><wbr><br><wbr><wbr><wbr>if(str[0]=='0')<br><wbr><wbr><wbr>{<br><wbr><wbr><wbr><wbr><wbr><wbr>if(neE==-1)<br><wbr><wbr><wbr><wbr>{<wbr><br><wbr><wbr><wbr><wbr><wbr>if(caretPt.x&gt;1)<br><wbr><wbr><wbr><wbr><wbr>{<br><wbr><wbr><wbr><wbr><wbr><wbr>CEdit::OnChar(nChar,nRepCnt, nFlags);<br><wbr><wbr><wbr><wbr><wbr><wbr>return;<br><wbr><wbr><wbr><wbr><wbr>}<br><wbr><wbr><wbr><wbr><wbr>else<br><wbr><wbr><wbr><wbr><wbr><wbr>return;<br><wbr><wbr><wbr><wbr>}<br><wbr><wbr><wbr><wbr>else<br><wbr><wbr><wbr><wbr><wbr>{<br><wbr><wbr><wbr><wbr><wbr><br><wbr><wbr><wbr><wbr><wbr><wbr><wbr>if((caretPt.x-1)!=neE&amp;&amp; caretPt.x&gt;1)<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr>{<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>CEdit::OnChar(nChar,nRepCnt, nFlags);<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>return;<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr>}<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr>else<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>return;<br><wbr><wbr><wbr><wbr><wbr><wbr>}<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><br><wbr><wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr><wbr><wbr>}<br><wbr><wbr><wbr><wbr><br><wbr><wbr><wbr><br><wbr><wbr><wbr>if(str[0]=='-')<br><wbr><wbr><wbr><wbr>{<br><wbr><wbr><wbr><wbr><wbr>if(str[1]=='0')<br><wbr><wbr><wbr><wbr><wbr>{<br><wbr><wbr><wbr><wbr><wbr><wbr>if(neE==-1)<br><wbr><wbr><wbr><wbr><wbr><wbr>{<wbr><br><wbr><wbr><wbr><wbr><wbr><wbr><wbr>if(caretPt.x&gt;2)<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr>{<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>CEdit::OnChar(nChar,nRepCnt, nFlags);<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>return;<wbr><wbr><wbr><wbr><wbr><br><wbr><wbr><wbr><wbr><wbr><wbr><wbr>}<br><wbr><wbr><wbr><wbr><wbr><wbr>else<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr>return;<br><wbr><wbr><wbr><wbr><wbr><wbr>}<br><wbr><wbr><wbr><wbr><wbr><wbr>else<br><wbr><wbr><wbr><wbr><wbr><wbr>{<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr>if((caretPt.x-1)!=neE&amp;&amp; caretPt.x&gt;2)<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr>{<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>CEdit::OnChar(nChar,nRepCnt, nFlags);<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>return;<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr>}<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr>else<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>return;<wbr><br><wbr><wbr><wbr><wbr><wbr><wbr>}<br><wbr><wbr><wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr><wbr>}<br><wbr><wbr><br><wbr><wbr><wbr><wbr><br><wbr><wbr><wbr><wbr>}<br><wbr><wbr><wbr><br><wbr><wbr><wbr>if(str[0]&gt;='1'&amp;&amp; caretPt.x&gt;0)<br><wbr><wbr><wbr>{<wbr><wbr><br><wbr><wbr><wbr><wbr><br><wbr><wbr><wbr><wbr>CEdit::OnChar(nChar,nRepCnt, nFlags);</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr><wbr><wbr>return;<br><wbr><wbr><wbr>}</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><br><wbr><wbr><br><wbr><wbr><wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr><wbr>}<br><wbr>}<br><wbr><wbr><br><wbr><br><wbr><br><wbr><br><wbr>else<br><wbr><wbr><br><wbr><wbr>//////////////////////////////////////////////////////<br><wbr><wbr>//Determine the '-'<br><wbr><wbr>if (nChar == '-')<br><wbr><wbr>{<br><wbr><wbr><wbr>if(!caretPt.x)<br><wbr><wbr><wbr>{<br><wbr><wbr><wbr><wbr>if(((nLength &gt; 0) &amp;&amp; (str[0]!='-')) || (nLength==0))<br><wbr><wbr><wbr><wbr><wbr>CEdit::OnChar(nChar,nRepCnt, nFlags);<br><wbr><wbr><wbr>}<br><wbr><wbr>else<br><wbr><wbr>{<br><wbr><wbr><wbr>if ((str[caretPt.x-1] == 'e') || (str [caretPt.x-1] == 'E'))<br><wbr><wbr><wbr><wbr>CEdit::OnChar(nChar,nRepCnt, nFlags);<br><wbr><wbr>}<br><wbr>}</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr>else<br><wbr><br><wbr><wbr>////////////////////////////////////////////////////////////<br><wbr><wbr>//Input'e' or 'E'<br><wbr><wbr><br><wbr><wbr>if ((nChar == 'e') || (nChar =='E'))<br><wbr><wbr>{<br><wbr><wbr><wbr>if((caretPt.x == 1) &amp;&amp; (str[0] == '-'))<br><wbr><wbr><wbr><wbr>return;</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr><wbr>if(caretPt.x)<br><wbr><wbr>{<br><wbr><wbr><wbr><wbr>if(neE!=-1)<br><wbr><wbr><wbr><wbr><wbr>return;<br><wbr><wbr><wbr>if(nDot!=-1&amp;&amp; caretPt.x&lt;nDot)<br><wbr><wbr><wbr><wbr>return;</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr><wbr><wbr>CEdit::OnChar(nChar,nRepCnt, nFlags);<br><wbr><wbr>}<br><wbr>}</wbr></wbr></wbr></wbr></wbr></wbr>

<wbr>else</wbr>


<wbr><wbr>//////////////////////////////////////////////////////<br><wbr><wbr>//Input '.'<br><wbr><wbr>if (nChar == '.')<br><wbr><wbr>{<br><wbr><wbr><wbr>if(nDot!=-1)<br><wbr><wbr><wbr><wbr>return;<br><wbr><wbr><br><wbr><wbr><wbr>if(neE!=-1&amp;&amp; caretPt.x&gt;neE)<br><wbr><wbr><wbr><wbr>return;<br><wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr><wbr>CEdit::OnChar(nChar,nRepCnt, nFlags);<br><wbr>}</wbr></wbr></wbr>

<wbr>此外如果要截取输入字符串末尾的‘0';可以利用消息WM_KILLFOCUS;</wbr>

函数代码如下:

void CNewEdit::OnKillfocus()
{
<wbr>// TODO: Add your control notification handlercode here<br><wbr>CString str,tr;<br><wbr>GetWindowText(str);<br><wbr>int nLength;<br><wbr><wbr><wbr> intnDot=-1;<br><wbr>int neE;<br><wbr>//double fstr;<br><wbr>nLength=str.GetLength();<br><wbr><br><wbr><br><wbr><br><wbr>for(int i=0;i&lt;nLength;i++)<br><wbr>{<br><wbr><wbr>if(str[i]==_T('.'))<br><wbr><wbr><wbr><wbr>nDot=i;<br><wbr>}<br><wbr><br><wbr>neE=max(str.Find(_T('e')),str.Find(_T('E')));<br><wbr><br><wbr><br><wbr><wbr><wbr><br><wbr>if(nDot!=-1 &amp;&amp; neE==-1)<br><wbr><wbr>str.TrimRight(_T("0"));<br><wbr>{<br><wbr><wbr> int t= str.Find('.');<br><wbr><wbr><br><wbr><wbr><br><wbr><wbr><wbr>if(t==str.GetLength()-1)<wbr><br><wbr><wbr><wbr>str+='0';<br><wbr>}</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr><br><wbr>SetWindowText(str);<br> }</wbr></wbr>


分享到:
评论

相关推荐

    Edit编辑框输入演示程序(VC6.0)

    VC6 MFC Edit控件 限制输入长度、仿序列号输入、限制输入指定的字符或数字、自动跳转到下一个编辑框

    vc++小实例等,,

    如何限制编辑框输入文本的长度.. 如何限制编辑框只能输入数字.. 如何在按钮上显示图标.. 如何在按钮上显示位图 如何在编辑框中实现多行显示.. 如何在编辑框中追加文本.. 如何在列表控件中插入列.. 如何在列表框中...

    vc++ 应用源码包_3

    自绘编辑框 自绘窗体界面 自绘对话框 listbox-6 重载CListBox,演示了拖动功能。 Mail_Report 演示了发送邮箱的功能。 MD5算法 MediaPlayer 视频播放的实现。 MFC 对话框 MP3 内部包含:mp3播放器Lrc歌词同步源...

    vc++ 应用源码包_1

    自绘编辑框 自绘窗体界面 自绘对话框 listbox-6 重载CListBox,演示了拖动功能。 Mail_Report 演示了发送邮箱的功能。 MD5算法 MediaPlayer 视频播放的实现。 MFC 对话框 MP3 内部包含:mp3播放器Lrc歌词同步源...

    VC++常用的共用函数100多页

    43、如何限制编辑框中的准许字符 53 44、如何改变控件的颜色 54 45、当向列表框中添加多个项时如何防止闪烁 55 46、如何向编辑控件中添加文本 55 47、如何访问预定义的GDI对象 55 48、如何获取GDI对象的属性信息 56 ...

    vc++ 应用源码包_5

    自绘编辑框 自绘窗体界面 自绘对话框 listbox-6 重载CListBox,演示了拖动功能。 Mail_Report 演示了发送邮箱的功能。 MD5算法 MediaPlayer 视频播放的实现。 MFC 对话框 MP3 内部包含:mp3播放器Lrc歌词同步源...

    vc++ 应用源码包_2

    自绘编辑框 自绘窗体界面 自绘对话框 listbox-6 重载CListBox,演示了拖动功能。 Mail_Report 演示了发送邮箱的功能。 MD5算法 MediaPlayer 视频播放的实现。 MFC 对话框 MP3 内部包含:mp3播放器Lrc歌词同步源...

    vc++ 应用源码包_6

    自绘编辑框 自绘窗体界面 自绘对话框 listbox-6 重载CListBox,演示了拖动功能。 Mail_Report 演示了发送邮箱的功能。 MD5算法 MediaPlayer 视频播放的实现。 MFC 对话框 MP3 内部包含:mp3播放器Lrc歌词同步源...

    vc++ 开发实例源码包

    自绘编辑框 如题。 自绘窗体界面 如题。 自绘对话框 如题。 listbox-6 重载CListBox,演示了拖动功能。 Mail_Report 演示了发送邮箱的功能。 MD5算法 如题。 MediaPlayer 视频播放的实现。 MFC 对话框 MP3 ...

    VC++常用功能实例

    43、如何限制编辑框中的准许字符 53 44、如何改变控件的颜色 54 45、当向列表框中添加多个项时如何防止闪烁 55 46、如何向编辑控件中添加文本 55 47、如何访问预定义的GDI对象 55 48、如何获取GDI对象的属性信息 56 ...

    简易计算器

    1、添加编辑框对应的变量m_number 2、添加运算符类型变量 Char cc; //用于存储运算符类型 CString firstnumber; //用于保存运算符前面的输入值 3、添加各种按钮的单击事件处理方法的函数 控件名称列表: 主对话框...

    VC特效制作100例

    实用与原理性的东西,对于想打好VC基础的朋友应该有帮助.示例目录:实例1 mfc框架. 文档和视 实例2 创建多文档窗口 实例3 创建对话框窗口 ...实例49 ip地址输入编辑框 实例50 下拉列表控件中的编辑柜 实例51 掩膜

    Visual C++高级界面特效制作百例

    实例52 数字输入控制编辑框 第14章 编辑框和树视控件 实例53 破解密码框内容 实例54 16进制编辑输入框 实例55 树型注释 实例56 目录树结构 第15章 组合框集锦 实例57 多列显示的组合框 实例58 自动完成功能...

    计算器 mfc 代码

    1、添加编辑框对应的变量m_Display 2、添加运算符类型变量 char CompuType; //用于存储运算符类型 CString FirstInput; //用于保存运算符前面的输入值 3、添加各种按钮的单击事件处理方法的函数 控件名称列表: 主...

    2009.6.19—30举办3S研讨会暨Google Earth与Google Map等仿真建模与共享及ARCGIS与遥感高级程序员培训班

    3、以ARCCIS9的功能结构主线,学习利用ARCCIS进行数据输入,数据编辑,地图配标,投影转换,数据转换,数据显示(包括三维显示)与制图,数据查询与分析,数据输出等一系列操作。(以ARCCIS在农业中的应为例介绍) ...

    VC与Labview、Matlab编程论文资料[2].rar

    MATCOM与VC_混合编程中自定义函数作为输入参数的调用方法.pdf MATCOM与VC_混合编程方法在图像处理中的应用.pdf MATLAB与VC_混合编程在系统辨识中的应用.pdf Matlab与VC接口在医学图像处理中的应用.pdf Matlab与...

    VC与Labview、Matlab编程论文资料

    MATCOM与VC_混合编程中自定义函数作为输入参数的调用方法.pdf MATCOM与VC_混合编程方法在图像处理中的应用.pdf MATLAB与VC_混合编程在系统辨识中的应用.pdf Matlab与VC接口在医学图像处理中的应用.pdf Matlab与...

    VC与Labview、Matlab编程论文资料[4].rar

    MATCOM与VC_混合编程中自定义函数作为输入参数的调用方法.pdf MATCOM与VC_混合编程方法在图像处理中的应用.pdf MATLAB与VC_混合编程在系统辨识中的应用.pdf Matlab与VC接口在医学图像处理中的应用.pdf Matlab与...

Global site tag (gtag.js) - Google Analytics