CRichEdit控件制作打字软件ONCHANGE事件
两个CRichEdit控件制作打字软件(中文)利用ONCHANGE事件正确和错误的字符用不同的背景色提示。问题是要多按一个空格或按退格键才会正确显示。
void CWztestDlg::OnChangeRichedit2()
{
CWnd *wnd,*wndstatic;
CString wznum,txt1,txt2,temp1,temp2; //richedit文本框的内容长度,两个文本框的内容及每次截取的字符
int wzlength;
wnd=GetDlgItem(IDC_RICHEDIT2); //第二个文本框
wzlength=wnd->GetWindowTextLength();
wznum.Format("%d",wzlength);
wndstatic=GetDlgItem(IDC_STATIC);
CHARFORMAT2 cf; //声明为CHARFORMAT2结构,详细见MSDN
ZeroMemory(&cf, sizeof(CHARFORMAT2));
cf.cbSize = sizeof(CHARFORMAT2);
cf.dwMask = CFM_BACKCOLOR;
GetDlgItem(IDC_RICHEDIT1)->GetWindowText(txt1);//获取第一个文本框内容
wnd->GetWindowText(txt2); //获取第二个文本框内容
if(txt2.GetLength()>txt1.GetLength())
return;
for(int i=0;i<txt2.GetLength();i=i+2) //两个文本中内容比对
{
temp1=txt1.Mid(i,2);
temp2=txt2.Mid(i,2);
if(temp1==temp2)
{
//设置字体
cf.crBackColor=RGB(0, 255, 0); //背景颜色为绿色
m_richedit.SetSel(i, i+1); //设置处理区域
m_richedit.SendMessage(EM_SETCHARFORMAT,SCF_SELECTION,(LPARAM)&cf);
}
else
{
cf.crBackColor=RGB(0, 0, 255); //背景颜色为绿色
m_richedit.SetSel(i, i+1); //设置处理区域
m_richedit.SendMessage(EM_SETCHARFORMAT,SCF_SELECTION,(LPARAM)&cf);
} //光标移动到文本末尾
}
m_richedit.SetSel(-1,-1);
//m_richedit.SetSel(txt2.GetLength(),txt2.GetLength());
m_richedit.SetFocus();
}