Mfc CRichEditCtrl::OnMouseMove

Mfc CRichEditCtrl::OnMouseMove,mfc,Mfc,在windows操作系统中,基于MFC对话框的应用程序(子类CRICHEDITCRL)中,我使用绿色表示特定格式的文本%\uuuuuuu%embed text。在onmousemove函数中,如果char是embed text,我将显示手动光标 要检查字符是否嵌入文本,我将使用下面的代码检查字符颜色。我无法向后选择文本Multiple charcaters,因为我正在onmousemove中调用SetSel,但对于向前选择,我没有遇到任何问题 如何处理 void CMyRichEditCtrl:

在windows操作系统中,基于MFC对话框的应用程序(子类CRICHEDITCRL)中,我使用绿色表示特定格式的文本%\uuuuuuu%embed text。在onmousemove函数中,如果char是embed text,我将显示手动光标

要检查字符是否嵌入文本,我将使用下面的代码检查字符颜色。我无法向后选择文本Multiple charcaters,因为我正在onmousemove中调用SetSel,但对于向前选择,我没有遇到任何问题

如何处理

void CMyRichEditCtrl::OnMouseMove(UINT nFlags, CPoint point)
{
long char_index=CharFromPos(point);
CHARRANGE crOld;
CHARFORMAT cf;
GetSel(crOld);
SetSel(char_index,char_index+1);
CString strString=GetSelText();
GetSelectionCharFormat(cf);
bEmbed=(!strString.IsEmpty() && cf.crTextColor == EMBEDCOLOR)?true:false;
SetSel(crOld);
if(bEmbed)m_bHandCursor=true;
CRichEditCtrl::OnMouseMove(nFlags, point);
}

可能与主题无关,但您不应该在OnSetCursor中设置游标吗?SetSelchar_索引中的l是什么,l+1;?CharFromPos向您返回单个字符的位置,要检查其格式,您需要从该位置选择下一个位置;你为什么要倒退?另外,我建议在设置和恢复选择时使用HideSelection,以避免闪烁:@Vlad Feinstein-我尝试了HideSelection。这并不能解决问题。。最终用户可以选择向后/向前方向。@Vlad Feinstein-如果我将确定m_bHandCursor的逻辑移动到OnSetCursor,则向后自动选择工作正常。