如何限制编辑框中的准许字符

解决方案 »

  1.   

    如果用户在编辑控件中只允许接收数字,可以使用一个标准的编辑控件并指
    定新的创建标志ES_NUMBERS,它是Windows 95新增加的标志,该标志限制 编辑控
    件只按收数字字符。如果用户需要复杂的编辑控件,可以使用Microsoft 的屏蔽
    编辑控件,它是一个很有用的OLE定制控件。
        如果希望不使用OLE 定制控件自己处理字符,可以派生一个CEdit 类并处理
    WM_CHAR消息,然后从编辑控件中过滤出特定的字符。首先,使用ClassWizard 建
    立一个 CEdit的派生类,其次,在对话类中指定一个成员变量将编辑控件分类在
    OnInitdialog 中调用CWnd: : SubclassDlgItem .//In your dialog class declaration (.H file )
    private :
        CMyEdit m_wndEdit ; // Instance of your new edit control .//In you dialog class implementation (.CPP file )
    BOOL CSampleDialog : : OnInitDialog ( )
    {    //Subclass the edit lontrod .
        m_wndEdit .SubclassDlgItem  (IDC_EDIT,this );    …
    }
        使用ClassWizard处理WM_CHAR消息,计算nChar参量并决定所执行的操作,用
    户可以确定是否修改、传送字符。下例说明了如何显示字母字符,如果字符是字母
    字符,则调用CWnd ; OnChar,否则不调用OnChar.
    //Only display alphabetic dharacters .
    void CMyEdit : : OnChar (UINT nChar , UINT nRepCnt , UITN nFlags )
    {
        //Determine if nChar is an alphabetic character .
        if (: : IsCharAlpha  ( ( TCHAR) nChar ) )
            CEdit : : OnChar (nChar, nRepCnt , nFlags );
    }
        如果要修改字符,则不能仅仅简单地用修改过的nChar调用CEdit : : OnChar,
    然后CEdit: : OnChar调用CWnd: : Default获取原来的wParam 和lParam 的值 ,这
    样是不行的。要修改一个字符,需要首先修改nChar,然后用修改过的nChar调用
    CWnd: : DefWindowProc。下例说明了如何将字符转变为大写:                                                       
    //Make all characters uppercase
    void CMyEdit : : OnChar (UINT nChar , UINT nRepCnt , UINT nFlags )
    {
        //Make sure character is uppercase .
        if (: : IsCharAlpha  ( .( TCHAR) nChar)
             nChar=: : CharUpper (nChar ) ;    //Bypass default OnChar processing and directly call
        //default window proc.
        DefWindProc (WM_CHAR, nChar , MAKELPARAM (nRepCnt , nFlags )) ;
    }