CString duibiwenzi_str;
duibiwenzi_str = "duibiwenzi";在EDIT控件(IDC_SHURUZIFU)里逐个输入duibiwenzi可以正常输入
如输入duibk
输入到k就不能再往下输入并显示出来,一定要匹配上CString里的对比文字才能继续上字..
第一个问题是在PreTranslateMessage做处理,还是在OnChar处理会比较好?
第二个问题是对比思路的函数应该怎么做? (这个比较希望能得到代码,哪怕是伪代码也好...)
谢谢!

解决方案 »

  1.   

    很主要的一个环节是不知道如何实现,每感应到按一次按键就
    GetDlgItemText(IDC_EDIT1, str);
    把目前字符给读出来判断如果第n位,匹配不上duibiwenzi_str的第n位,就做显示的字符-1,并把刚才输入的字符忽略掉。
      

  2.   

    http://www.pconline.com.cn/pcedu/empolder/gj/vc/0607/820674.html
      

  3.   

    ……EDIT控件,当输入框中内容改变时,会有 EN_CHANGE 和 EN_UPDATE 产生。看看你需要哪一个,就处理哪一个呗 ……
      

  4.   

    二楼的同志,不好意思啊,这样是拿不到分的,呼呼~
    写不下去了...IDC_IN是EDIT控件
    theApp.ShowStr是要对比的字
    theApp.NowString是用户当前输入的字串如果是apple
    输入了apol,只到按了l才有反应,不过是编辑光标重新回到第一位,而且后面的字不消失。 if(pMsg->message == WM_KEYDOWN)
    {
    GetDlgItemText(IDC_IN,theApp.NowString);   //获得当前输入的字符 if(theApp.NowString.GetLength() != theApp.goodStr.GetLength()) //如果输入的和需确认的长度不同
    for(int i=0;i<theApp.NowString.GetLength();i++) 
    {
    CString q = theApp.NowString.Left(i);
    CString w = theApp.goodStr.Left(i);
    if(q!=w)
    {
    theApp.NowString.Delete(i,1);
    GetDlgItem(IDC_IN)->SetWindowText(theApp.NowString);
    this->Invalidate();
    break;
    } }
      

  5.   


    在这个场合,跟KEYDOWN消息没区别吧?
      

  6.   

    1. 有键盘输入
    2. EDIT控件 产生 EN_UPDATE 
    3. EDIT控件 显示新输入的字符
    4. EDIT控件 产生 EN_CHANGE 
      

  7.   

    在OnChar里用
    GetDlgItemText(IDC_EDIT1, str);CString strTemp = duibiwenzi_str.Left(str.GetLength());
    if (strTemp != str)
    {
         return ;//不处理
    }
    //否则交给基类
      

  8.   

    BEGIN_MESSAGE_MAP(CaaaaDlg, CDialog) 
    ON_WM_SYSCOMMAND() 
    ON_WM_PAINT() 
    ON_WM_QUERYDRAGICON() 
    //}}AFX_MSG_MAP 
    ON_EN_CHANGE(IDC_SHURUZIFU, &CaaaaDlg::OnEnChangeShuruzifu) 
    END_MESSAGE_MAP() 
    void CaaaaDlg::OnEnChangeShuruzifu() 

    // TODO:  If this is a RICHEDIT control, the control will not 
    // send this notification unless you override the CDialog::OnInitDialog() 
    // function and call CRichEditCtrl().SetEventMask() 
    // with the ENM_CHANGE flag ORed into the mask. // TODO:  Add your control notification handler code here 
    CString sss,duibiwenzi_str = TEXT("duibiwenzi"); 
    GetDlgItemText(IDC_SHURUZIFU,sss); if(duibiwenzi_str.Left(sss.GetLength())!=sss) 

    sss.SetAt(sss.GetLength()-1,'\0'); 
    SetDlgItemText(IDC_SHURUZIFU,sss); 
    ((CEdit*)GetDlgItem(IDC_SHURUZIFU))->SetSel(-1); 

    }
      

  9.   

    OnChar()
    {
    CString strNow = Edit控件当前内容  //如“duibk”bool bCompare = true;
    if(strNow.length>=duibiwenzi_str.length)bCompare = false;
    if(duibiwenzi_str[strNow.length-1] != strNow[strNow.length-1]) bCompare = false;if(!bCompare)strNow.erase(strNow.length-1);Edit控件.SetWindowText(strNow);
    }
      

  10.   

    如果有汉字的话,onchar,wm_keydown是无法处理的,还在change中处理比较好。
      

  11.   

    在PreTranslateMessage中处理比较好,因为字符比较后可以不分发消息,真接返回TURE,如果在EN_CHANGE 和 EN_UPDATE 中处理的话,已写入要重设的值,又会触发EN_CHANGE ,这样无穷循环,不好处理。
      

  12.   

    重新定义一EDIT的窗口过程,在窗口过程中对输入的字符进行判断。