SDK:想控制EDIT里得输入,比如说只允许输入数字,但要带小数点。控件有个属性是:NUMBER设置后只允许输入数字没有小数点。我想既然数字可以,再解决个小数点应该没有问题,为什么搜了那么多帖子都没有很好得解决?
急需您得帮助!
谢谢。

解决方案 »

  1.   

    继承CEdit类,编写自己的控件
    添加对WM_CHAR消息的处理
      

  2.   

    sdk是要子类化的,先用SetWindowLong给Edit一个你自己的回调函数,在你的回调中处理wm_char消息就可以了。
      

  3.   

    继承CEdit类,编写自己的控件
    添加对WM_CHAR消息的处理void CPhoneEdit::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags) 
    {
    // TODO: Add your message handler code here and/or call default
        if (((nChar >= _T ('0')) && (nChar <= _T ('9'))) ||
            (nChar == VK_BACK) || (nChar == _T ('.')))
    CEdit::OnChar(nChar, nRepCnt, nFlags);
    }
      

  4.   

    直接覆盖editchange事件,    if (((nChar >= _T ('0')) && (nChar <= _T ('9'))) ||
            (nChar == VK_BACK) || (nChar == _T ('.')))
    {
    }
      

  5.   


    收到你的短消息,我的回答太长,发不了sdk处理是这样的
    WNDPROC wpOrigEditProc; 
     //这是一个主对话框过程,
    LRESULT APIENTRY EditBoxProc(
        HWND hwndDlg, 
        UINT uMsg, 
        WPARAM wParam, 
        LPARAM lParam) 

        HWND hwndEdit; 
     
        switch(uMsg) 
        { 
            case WM_INITDIALOG: 
                // Retrieve the handle to the edit control. 
                hwndEdit = GetDlgItem(hwndDlg, ID_EDIT); 
     
                // Subclass the edit control. 
                wpOrigEditProc = (WNDPROC) SetWindowLong(hwndEdit, 
                    GWL_WNDPROC, (LONG) EditSubclassProc); //子类化,设置你的处理函数
                // 
                // Continue the initialization procedure. 
                // 
                return TRUE; 
     
            case WM_DESTROY: 
                // Remove the subclass from the edit control. 
                SetWindowLong(hwndEdit, GWL_WNDPROC, 
                    (LONG) wpOrigEditProc); //把原来的处理过程设回去
                // 
                // Continue the cleanup procedure. 
                // 
                break; 
        } 
        return FALSE; 
            UNREFERENCED_PARAMETER(lParam); 

     
    // Subclass procedure //你的处理函数
    LRESULT APIENTRY EditSubclassProc(
        HWND hwnd, 
        UINT uMsg, 
        WPARAM wParam, 
        LPARAM lParam) 

        if (uMsg == WM_GETDLGCODE) 
            return DLGC_WANTALLKEYS; //在这里你用switch(){}可以处理Edit的消息wm_char
     
        return CallWindowProc(wpOrigEditProc, hwnd, uMsg, 
            wParam, lParam); //调原来的Edit的处理函数

      

  6.   

    继承CEdit类处理WM_CHAR消息函数或使用子类化
      

  7.   

    我刚刚做了一个这样的问题
    也是输入数据,但是我没有限定必须输入数据,而是转换了一下
    Mm 是矩阵类,你可以把他改成数组或者CArray类
    Mm CDProgramDlg::GetArray(CEdit& eidtboxID)
    {
    int i;
    int nLineCount = eidtboxID.GetLineCount();
    Mm temp=zeros(1,nLineCount);
    CString strText;    
    // Dump every line of text of the edit control.
    for (i=0;i<nLineCount;i++)
    {
    eidtboxID.GetLine(i, strText.GetBuffer(eidtboxID.LineLength(i)));
    strText.ReleaseBuffer(eidtboxID.LineLength(i));
    temp.r(1,i+1)=atof(strText);   
    }
    return(temp);
    }