当我设置编辑控件只接收数字输入,并且添加了一个double类型的变量。
只接收数字输入是没问题,但却无法输入小数,因为小数点无法输入!
令人遗憾的是这个问题在VS2005中还存在……
有什么解决方法吗?

解决方案 »

  1.   

    去掉,数字的风格
    自己处理EN_CHANGE
      

  2.   

    在类向导中新建一个类,其基类为CEdit,然后重载onchar函数。
    CcEdit::OnChar(UINT nChar,UINT nRepCnt,UINT nFlags)
    {
    if(((nChar>='0')&&(nChar<='9'))||(nChar=='.'))
                CEdit::OnChar(UINT nChar,UINT nRepCnt,UINT nFlags);
    }
      

  3.   

    去掉数字风格后,输入还是有问题啊(具体自己试试……)
    Libby,修改后的控件可以在对话框中直接放置吗?
      

  4.   

    你在初始化的时候,用creat函数画出来。
    还有一个方法,就是不重载OnChar函数,而是重载PreTranslateMessage(MSG* pMsg)函数,截获所有的键盘消息,如果是数字或点点话就响应。当然,这个前提是你在这个对话框中没有其他的地方要相应键盘消息。例子如下:
    BOOL CsDlg::PreTranslateMessage(MSG* pMsg)
    {
    if(pMsg->message==WM_KEYDOWN)

    if((int(pMsg->wParam)>=96&&int(pMsg->wParam)<=105)//小键盘0-9
    ||int(pMsg->wParam)==8||int(pMsg->wParam)==110||int(pMsg->wParam)==229)
    if  (::GetKeyState(VK_SHIFT)  >=  0)   //shift没有被按下
    {
    return CWnd::PreTranslateMessage(pMsg);
    }
    else
    return true;
    else
    return true;
    }
    return CWnd::PreTranslateMessage(pMsg);
    }
    重载后要在对话框头文件里声明。