一个打字练习的东东,想达到边打字边实现检查,把输错字的变为红色。原来在ENM_CHANGE里写,发现录入英文或数字能够实时地改变颜色,而中文却不行。然后写在EN_UPDATE里,改颜色倒是正确了,但光标没有了,而且输入法的提示框把界面也破坏了,不能重绘了。请各位大大不吝指教!!!void CTypeTestDlg::OnUpdateRichedit1()
{
long nStart, nEnd;
int len=m_re_type_1.GetTextLength ();
m_re_type_1.GetSel(nStart, nEnd);
CheckType(&m_re_type_1,nStart,len);
}VOID CheckType(CRichEditCtrl* type,int point,int len)
{
CHARFORMAT cf;
ZeroMemory(&cf, sizeof(CHARFORMAT));
cf.cbSize = sizeof(CHARFORMAT);
cf.dwMask = CFM_COLOR;
CString strTemp;
for (int i=0;i<len;i++)
{
type->SetSel (i,i+1);
strTemp=type->GetSelText();
if (view_1[i]==strTemp) //检查输入正确性
{
cf.crTextColor = RGB(0, 255, 0);
}
else
{
cf.crTextColor = RGB(255, 0, 0);
}
type->SetSelectionCharFormat(cf);
}
type->SetSel (point,point);
}是不是EN_UPDATE在不断地调用呢?m_re_type_1.SetEventMask(m_re_type_1.GetEventMask()|EN_UPDATE);好似没错
{
long nStart, nEnd;
int len=m_re_type_1.GetTextLength ();
m_re_type_1.GetSel(nStart, nEnd);
CheckType(&m_re_type_1,nStart,len);
}VOID CheckType(CRichEditCtrl* type,int point,int len)
{
CHARFORMAT cf;
ZeroMemory(&cf, sizeof(CHARFORMAT));
cf.cbSize = sizeof(CHARFORMAT);
cf.dwMask = CFM_COLOR;
CString strTemp;
for (int i=0;i<len;i++)
{
type->SetSel (i,i+1);
strTemp=type->GetSelText();
if (view_1[i]==strTemp) //检查输入正确性
{
cf.crTextColor = RGB(0, 255, 0);
}
else
{
cf.crTextColor = RGB(255, 0, 0);
}
type->SetSelectionCharFormat(cf);
}
type->SetSel (point,point);
}是不是EN_UPDATE在不断地调用呢?m_re_type_1.SetEventMask(m_re_type_1.GetEventMask()|EN_UPDATE);好似没错
使用UpdateData()来刷新所有控件