一个打字练习的东东,想达到边打字边实现检查,把输错字的变为红色。原来在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);好似没错

解决方案 »

  1.   

    使用UpdateData()来刷新所有控件
      

  2.   

    >>使用UpdateData()来刷新所有控件不行的。
      

  3.   

    在ENM_CHANGE里写改颜色的过程,中文不是不行,只是不能实时地改。。按个退格键后,效果就正常了。。怪了。。
      

  4.   

    我认为  这个改变字色的函数可以放在OnChar里
      

  5.   


    使用UpdateData()来刷新所有控件
      

  6.   

    使用UpdateData()来刷新所有控件,楼上两位正解.