如何控制CEdit文本对话框只能输入英文和数字?不能输入其它字符和汉字?

解决方案 »

  1.   

    派生一个CMyEdit类,进行处理。以下代码随手写的没经过测试。BOOL CMyEdit::PreTranslateMessage(MSG* pMsg )
    {
       if(pMsg->message == WM_CHAR)
       {
          if((pMsg->wParam >= 0x30 && pMsg->wParam <= 0x39) || /*1~9*/
             (pMsg->wParam >= 0x41 && pMsg->wParam <= 0x5A) || /*A~Z*/
             (pMsg->wParam >= 0x61 && pMsg->wParam <= 0x7A))   /*a~z*/
          {
             return CEdit::PreTranslateMessage(pMsg);
          }
          else
          {
             return TRUE;
          }
       }
       return CEdit::PreTranslateMessage(pMsg);
    }
      

  2.   

    ls的可以,但还是有个缺陷,右键菜单可以粘贴进来非法的字符
    所以还要将CEdit的右键菜单禁用掉
      

  3.   

    派生一个,是比较好的做法我就是这样做的,用于输入16进制的值,含有字符和数字确实还要将CEdit的右键菜单禁用掉
      

  4.   

    再处理WM_SETTEXT里,在这里也把非法的字符过滤掉!!
      

  5.   

    通用方法 : 子类化禁用右键时,拦截WM_RBUTTONDOWN不处理就行...(同样在PreTranslateMessage里)
      

  6.   

    不需要禁用右键,把WM_SETTEXT,WM_PASTE也处理一下就可以防止粘贴的字符!!