CRichEdit控件制作打字软件ONCHANGE事件

qq_41227742 2020-06-29 04:03:02
两个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();

}
...全文
233 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
蒋晟 2020-07-19
  • 打赏
  • 举报
回复
打字软件每按一个键就检查一遍拼写太蛋疼了……用户一分钟可以按几百个键的,还是用定时器吧,用户半秒钟内没有输入的时候才去检查。定时器一直在跑,也不会依赖于EN_CHANGE的触发——不过一段时间内没有EN_CHANGE就什么都不干或者干脆关掉定时器。 PS你把CRichEdit::SetSelectionCharFormat自己重写了一遍是怎么回事?
qq_41227742 2020-07-16
  • 打赏
  • 举报
回复
是不是用UNICODE编码,我也不知道,刚基础VC
Eleven 2020-07-01
  • 打赏
  • 举报
回复
你的是Unicode编码的吗?
qq_41227742 2020-06-30
  • 打赏
  • 举报
回复
EN_UPDATE 事件,不行啊
zgl7903 2020-06-29
  • 打赏
  • 举报
回复

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧