请问:如何控制 CEdit 中,不能被输入 ( 号???

解决方案 »

  1.   

    最简单的办法是 派生一个新类 CYourEdit,然后重载OnChar,拦截你要过滤的“(”即可
      

  2.   

    或者参考  http://vccode.com/file_show.php?id=2724
      

  3.   

    void CAsdfDlg::OnEnChangeEditTest()
    {
    CString sTemp;
    GetDlgItem(IDC_EDIT_TEST)->GetWindowText(sTemp);//IDC_EDIT_TEST是我EDIT的ID
    int time = 0;
    int i = sTemp.FindOneOf("(");//我不想要的字符集合
    while (i > 0)
    {
    sTemp.Delete(i);
    i = sTemp.FindOneOf("(");
    time++;
    }
    if (time > 0)
    {//设置光标至文本末尾
    GetDlgItem(IDC_EDIT_TEST)->SetWindowText(sTemp.GetBuffer(0));
    ((CEdit*)GetDlgItem(IDC_EDIT_TEST))->SetSel(sTemp.GetLength(), sTemp.GetLength());
    }
    }
      

  4.   

    感谢你提出这个问题,提醒我修改了一个BUG
      

  5.   

    CEdit有个处理内容改动的消息EN_CHANGE,当有输入时就会触发此消息。添加这个消息,然后监控用户的输入,当出现非法输入时给出提示即可。还是挺方便的,不是吗?
      

  6.   

    不好意思,
    把while (i > 0)该成while (i >= 0)
      

  7.   

    还是自己写个新类,重载OnChar简单,想拦截什么,一句话搞定,我现在就是这么用的.
      

  8.   

    同意,用OnChar来判断,用窗口子类化也可以的