我用如下方法从 IDC_EDIT 读取到数据的
CString a;
CString b;
GetDlgItemText(IDC_EDIT1,a);
GetDlgItemText(IDC_EDIT2,b);
string  s1   = (LPCTSTR)a;
string  s2   = (LPCTSTR)b;我现在想对输入的数据做如下限定
1、输入的字符最长的长度为8个字符,包括 粘贴 是也要保证最长8个字节,长于8个字符的部分 自动去掉。2、输入的字符,只能为0~~f 这16个字符,输入其它字符,无法输入。如果能弹出提示信息最好,但是也不是必须的。3、如果的字符,不论是在Caps Lock使能的情况下 或是 Shift+字符的情况下,输入的内容自动变化成小写。不知道如何实现,谢谢。

解决方案 »

  1.   

    1,可以用SetLimitText这个函数来设定个数。
    2,3这两个问题可以重写一下CEdit这个类,在OnChar这个事件中加一些条件。得到一个字符就判断一下是不是在这个范围内的字母,如果是大写的话,转成小写输出,上面的判断可以判断这个字符的ASCII值
      

  2.   

    Edit Control第一个问题,控件本身就可以设置内容的长度;后两个问题,可以通过 WM_CHAR 消息处理。
      

  3.   

    说得比较乱,一会儿字节数一会儿字符数。
    1:可以在类向导中绑定变量后进行设置;
    2:处理OnEditChange
    3:可以在控件属性上直接设置 Lowercase,输入的字母即可自动转化为小写
      

  4.   


    WM_CHAR中判断按下的按键是什么,分别进行处理。
      

  5.   


    1、建立自己的 Edit Control 类class CMyEdit : public CEdit
    2、重载 OnChar 函数void CMyEdit::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags) 
    {
    if( ((nChar>=0x30)&&(nChar<=0x39))||((nChar>=0x61)&&(nChar<=0x66))||(nChar==0x08) )
    {
    CEdit::OnChar(nChar, nRepCnt, nFlags);
    }
    }
    // 0x30 ~ 0x39 就是字符 0 ~ 9 ;0x61 ~ 0x66 是 a,b,c,d,e,f ; 0x80 是 Backspace 键。// 你先试试看
      

  6.   

    我做过类似的,当时是只允许输入数字和+-*/符号,
    CEdit m_edtCtrl;
    ……
    typedef  LONG FAR  (PASCAL  *WndProc)( HWND hWnd,unsigned message,WORD wParam,LONG lParam);WndProc  OldEditWnd;LONG FAR PASCAL NeWWndProc(  HWND hWnd,
        unsigned message,
        WORD wParam,
        LONG lParam)
    {
    switch(message)
    {
    case WM_CHAR:
    if((wParam>'9'||wParam <'0')&&(wParam!='-'&&wParam!=','&&wParam!='\b')) 

       return  0; 

    default:
    if(OldEditWnd != NULL)
    OldEditWnd(hWnd,message,wParam,lParam);
    }
    }
    ……
    添加如下代码
    OldEditWnd = (WndProc )GetWindowLong(m_edtCtrl.m_hWnd,GWL_WNDPROC);
        SetWindowLong(m_edtCtrl.m_hWnd,GWL_WNDPROC,(long)NeWWndProc);
      

  7.   

    // 限定字符如下// 在对话框的 OnInitDialog 函数中设定m_edit.SetLimitText( 8 );
      

  8.   

    还有一种方法,自己新建一个CMyEdit类
    为该类添加OnChar()事件
    void CMyEdit::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
    {

    if(nChar>'9'||nChar<'0'&&nChar!=VK_BACK&&nChar!='+'&&nChar!='-'&&nChar!='*'&&nChar!='/')
    {
    return;
    }
    //AfxMessageBox("OK");
    CEdit::OnChar( nChar,  nRepCnt,  nFlags);
    }
    然后把这个CMyEdit替换CEdit m_edit;
      

  9.   

    在 OnInitDialog 函数中 加入 m_edit.SetLimitText( 8 ); 后 编译 报错error C2228: left of '.SetLimitText' must have class/struct/union type楼上的各位兄台 高估了小弟的水平 小弟要好好学习学习vc了
      

  10.   

    ((CEdit*)GetDlgItem(IDC_EDIT1))->SetLimitText( 8 )
      

  11.   

     m_edit.SetLimitText( 8 ); 你如果要这样用,必须设置变量关连,按Ctrl+W,在Member Variables中为IDC_EDIT1添加CEdit型变量m_edit
      

  12.   

    m_edit是那个编辑框的成员函数。要不,你用((CEdit*)GetDlgItem(IDC_EDIT1))->SetLimitText( 8 );好了。