SetSelectionCharFormat函数失败! (超级奇葩的有关问题!)

SetSelectionCharFormat函数失败! (超级奇葩的问题!)
我在Richedit对象中,为了判断我给出的字符和用户输入的字符是否相同,在OnChange函数中下加入如下代码:

 m_reInput.LimitText(34);
 CString strOutput; //我给出的字符
 CString strInput; //用户输入的字符
 m_reOutput.GetWindowText(strOutput);
 m_reInput.GetWindowText(strInput);
 UINT nStrInput=strInput.GetLength(); //获得字符的长度
 
 for (int i=0;i<nStrInput;i++) //逐个检测字符是否相同
 {
  m_reInput.SetSel(i*2,2+i*2); //一个汉字占两个字节,所以乘2
  bool bString; //字符相同为true,字符不同为false
  if (strOutput.Mid(i,1)==strInput.Mid(i,1)) //检测字符是否相同
  bString=true;
  else
  bString=false;
  if (bString) //如果字符相同,那么修改字符字体为m_cfmCorrect
m_reInput.SetSelectionCharFormat(m_cfmCorrect); else //如果字符不同,那么修改字符字体为m_cfmWrong
m_reInput.SetSelectionCharFormat(m_cfmWrong); m_reInput.SetSel(-1,-1); //光标放置字符串最后

}

代码是没有错的,但是SetSelectionCharFormat函数却执行失败。

并且最奇怪的是,但我输入一串字符后,我按Backspace(退格)键,之前输入的字符串就能够正确显示。
求教各位高人了!



------解决方案--------------------
根据这些代码改一下你的程序
C/C++ code

#define WM_MSG_UPDATETEXT (WM_USER+101)


BOOL m_bInUpdateText;
void OnUpdateText();


ON_MESSAGE_VOID(WM_MSG_UPDATETEXT, OnUpdateText)


void CAboutDlg::OnEnChangeRichedit21()
{
    if (!m_bInUpdateText)
        PostMessage(WM_MSG_UPDATETEXT,0,0);
}


void CAboutDlg::OnUpdateText()
{
    m_bInUpdateText = TRUE;

    CString strOutput = L"你好世界"; //我给出的字符
    CString strInput; //用户输入的字符

    m_reInput.GetWindowText(strInput);
    UINT nStrInput=strInput.GetLength(); //获得字符的长度

    for (int i=0;i<nStrInput;i++) //逐个检测字符是否相同
    {
        m_reInput.SetSel(i,1+i); //一个汉字占两个字节,所以乘2
        bool bString; //字符相同为true,字符不同为false
        if (strOutput.Mid(i,1)==strInput.Mid(i,1)) //检测字符是否相同
            bString=true;
        else
            bString=false;
        if (bString) //如果字符相同,那么修改字符字体为m_cfmCorrect
            m_reInput.SetSelectionCharFormat(m_cfmCorrect);
        else //如果字符不同,那么修改字符字体为m_cfmWrong
            m_reInput.SetSelectionCharFormat(m_cfmWrong);
        m_reInput.SetSel(-1,-1); //光标放置字符串最后
    }

    m_bInUpdateText = FALSE;
}