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(退格)键,之前输入的字符串就能够正确显示。
求教各位高人了!
------解决方案--------------------
根据这些代码改一下你的程序
我在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; }