CString duibiwenzi_str;
duibiwenzi_str = "duibiwenzi";在EDIT控件(IDC_SHURUZIFU)里逐个输入duibiwenzi可以正常输入
如输入duibk
输入到k就不能再往下输入并显示出来,一定要匹配上CString里的对比文字才能继续上字..
第一个问题是在PreTranslateMessage做处理,还是在OnChar处理会比较好?
第二个问题是对比思路的函数应该怎么做? (这个比较希望能得到代码,哪怕是伪代码也好...)
谢谢!
duibiwenzi_str = "duibiwenzi";在EDIT控件(IDC_SHURUZIFU)里逐个输入duibiwenzi可以正常输入
如输入duibk
输入到k就不能再往下输入并显示出来,一定要匹配上CString里的对比文字才能继续上字..
第一个问题是在PreTranslateMessage做处理,还是在OnChar处理会比较好?
第二个问题是对比思路的函数应该怎么做? (这个比较希望能得到代码,哪怕是伪代码也好...)
谢谢!
GetDlgItemText(IDC_EDIT1, str);
把目前字符给读出来判断如果第n位,匹配不上duibiwenzi_str的第n位,就做显示的字符-1,并把刚才输入的字符忽略掉。
写不下去了...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;
} }
在这个场合,跟KEYDOWN消息没区别吧?
2. EDIT控件 产生 EN_UPDATE
3. EDIT控件 显示新输入的字符
4. EDIT控件 产生 EN_CHANGE
GetDlgItemText(IDC_EDIT1, str);CString strTemp = duibiwenzi_str.Left(str.GetLength());
if (strTemp != str)
{
return ;//不处理
}
//否则交给基类
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);
}
}
{
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);
}