void CMyEdit::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
{ if((nChar>='0'&&nChar<='9')||nChar=='.'||nChar==VK_DELETE||nChar==VK_BACK)       {if(nChar=='.')
        {
            int   nStart,nEnd;
           GetSel(nStart,nEnd);//这句什么意思           if(nStart==0)
         {
             AfxMessageBox("小数点不能在第一位");
                     return;
           }
              CString str;
            GetWindowText(str);
            if(str.Find('.')>=0)//这句什么意思          {
             if(!(str.Find('.')>=nStart&&str.Find('.')<nEnd))//这句是什么意思         {
          AfxMessageBox("不能输入第二个小数点");
               return;
          }
          }
          }
希望各位详细解释下  在此感谢了

解决方案 »

  1.   

    GetSel(nStart,nEnd);//得到你当前选中的字符或字符串的起始位置
    if(str.Find('.')>=0)//str(你的编辑框)中包含有'.'这个字符
    if(!(str.Find('.')>=nStart&&str.Find('.')<nEnd))//结合上面的那句,就是说如果你的Edit中已经输入了一个'.'字符,并且当前你选中的字符或字符串中不包含这个'.',那么你将不能再输入'.'
    就是说你的Edit中只能输入一个'.',但是当你已经输入了一个'.'字符后,允许你选中'.'这个字符或包含这个字符的字符串,用'.'去替换原来的'.'或包含'.'的字符串例如:
    你在Edit中输入了"123.456";如果你在"123.456"中再输入一个'.'是不允许的;但是可以用'.'替换"123.456"或者"123.456"中的红色部分
      

  2.   

    GetSel(nStart,nEnd);//这句什么意思 if(nStart==0)
    调用此成员函数获取一个编辑控件中当前被选中部分(如果有)的起始和结束位置,可用参数也可用返回值。
     
    if(str.Find('.')>=0)//这句什么意思
    在str中找字符'.'的位置,如果能找到,则Find的返回值肯定>=0,如果找不到,则Find返回-1 if(!(str.Find('.')>=nStart&&str.Find('.')<nEnd))//这句是什么意思
    个人觉得这句有问题。
      

  3.   

    GetSel(nStart,nEnd);//这句什么意思 if(nStart==0)
    调用此成员函数获取一个编辑控件中当前被选中部分(如果有)的起始和结束位置,可用参数也可用返回值。
     
    if(str.Find('.')>=0)//这句什么意思
    在str中找字符'.'的位置,如果能找到,则Find的返回值肯定>=0,如果找不到,则Find返回-1 if(!(str.Find('.')>=nStart&&str.Find('.')<nEnd))//这句是什么意思
    个人觉得这句有问题。
      

  4.   

    函数的具体用法可以参考MSDN文档