hur.cn - 华软网

 热门搜索

CRichEdit小问题

  作者:未知    来源:网络    更新时间:2011/10/7
我想用CRichEdit来把控件中的关键字用不同的颜色显示出来。但是在使用过程中遇到了麻烦。
  CRichEdit::SetSel()函数设定要改变的区域,但是用了它之后编辑框的Caret就不见了。。。也就是不能像平常那样输入了。。这是什么原因。同时希望能介绍一下CRichEdit::SetSel()工作原理。。
---华软 网友回答---
通过setsel设置完成后,还要设回原来的位置!

---华软网友回复---
CRichEdit::SetSel()之后Caret消失 重置CRichEdit控件焦点
C++"> 
m_myrichedit.SetFocus();
 

---华软网友回复---
先记住光标的位置,再setsel回来.下面这个函数好像是可以获取当前光标的位置的。
C++">
void GetCurrentPos(int &nRow,int &nCol)
{
CPoint VarCharPoint; //指定字符的位置  
CPoint CurrPoint;   //当前光标位置  
int LineFirstIndex; //当前行首字符位置  
int Length;   //当前行长度  
int CurrentCharIndex = 0; //当前编辑光标所在字符序号。  
//int CurrentLine;    //当前编辑光标所在的行号  
//int CurrentRow;   //当前编辑光标所在的列号  

CurrPoint = m_wndRichEdit.GetCaretPos(); //获取光标位置  
LineFirstIndex = m_wndRichEdit.LineIndex(-1);    //获取当前行首字符位置  
Length = m_wndRichEdit.LineLength(-1);    //获取当前行长度.  
int i;
for (i = 0; i < Length; i++)  
{  
VarCharPoint = m_wndRichEdit.GetCharPos(LineFirstIndex);  
if (VarCharPoint.x >= CurrPoint.x)  
{  
CurrentCharIndex = LineFirstIndex;  
break;  
}  
LineFirstIndex++;  
}  

//CurrentRow = i;   //列号  
//CurrentLine = m_wndRichEdit.LineFromChar(CurrentCharIndex);   //行号
nRow = m_wndRichEdit.LineFromChar(CurrentCharIndex);   //行号
nCol = i;
}

---华软网友回复---
在操作之前,GetCurSel,取得光标的位置,操作之后,SetSel就行了。

---华软网友回复---
  class="deleted_message"> 该回复于2011-10-09 09:15:00被版主删除        
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。