有关在Richedit中向上文本搜索的问题
需要从光标的位置向前搜索一个字符,代码段如下:
FINDTEXTEX ft;
ft.chrg.cpMin = 0;
ft.chrg.cpMax = -1;
ft.lpstrText = "|";
long lPos = FindText(0, &ft);
if (lPos != -1)
{
SetSel(ft.chrgText);
}
但是中返回的是字符中的第一个 "|"所在的位置,而不是当前光标的前一个"|"所在的位置,虽然用CString 也可以取到,但有些问题,如果有回车位置就不正确了,上一种有什么错误吗?怎样才能解决这个问题?
谢谢!解决后可另开贴给分
问题点数:100、回复次数:12Top
1 楼fengqinggao(风清高)回复于 2004-12-03 01:24:35 得分 0
CEditView有一个函数:
BOOL FindText( LPCTSTR lpszFind, BOOL bNext = TRUE, BOOL bCase = TRUE );
其中第二个参数就是确定你的搜索方向的,这样操作应该可以:
((CEditView*)this)->FindText(sYourStr, FALSE, TRUE);
如果发现,它会自动选中该文本,如果没有,返回为0,可能需要你自己弹出消息框提示用户
这是我想采用的方法,仅供参考
Top
2 楼fengqinggao(风清高)回复于 2004-12-03 01:26:07 得分 0
上面的代码我是考虑你在CRichEidtView中处理的,如果是CRichEditCtrl,可能需要再转换一下Top
3 楼flyer_2001()回复于 2004-12-03 11:19:09 得分 0
多谢 fengqinggao(风清高) ,我是在CRichEditCtrl中使用,它的原型为
long FindText( DWORD dwFlags, FINDTEXTEX* pFindText ) const;
但是始终是用不正确,请您指点一下,非常感谢!
Top
4 楼fengqinggao(风清高)回复于 2004-12-03 11:32:21 得分 0
先尝试一下我上面的强制转换的方法(即将CRichEditCtrl类转换成CRichEditView类),如果能够转换成功,就能使用CRichEditView的FindText(),这样就方便了,我也顺便看看CRichEditCtrl类的该函数的用法Top
5 楼fengqinggao(风清高)回复于 2004-12-03 11:43:27 得分 100
然后这样试一试看看:
ft.chrg.cpMin = 你光标现在所在位置;
ft.chrg.cpMax = 0;
按照CSDN上的说法,应该是可以的。你的设置是在所有文本中搜索,它当然就从文本开头开始搜索了,得到第一个“|”是正常的Top
6 楼flyer_2001()回复于 2004-12-03 13:07:30 得分 0
谢谢 fengqinggao(风清高)
强制转换结果不正确
第二方法也不行,我再试试这些参数
Top
7 楼flyer_2001()回复于 2004-12-03 13:08:37 得分 0
//////
按照CSDN上的说法,应该是可以的。你的设置是在所有文本中搜索,它当然就从文本开头开始搜索了,得到第一个“|”是正常的
//////
不过我参数是设置从当前光标向前搜索
Top
8 楼fengqinggao(风清高)回复于 2004-12-03 13:58:22 得分 0
这是CSDN中的原话:
You can search either up or down by setting the proper range parameters in the CHARRANGE structure within the FINDTEXTEX structure
意思是只要设置FINDTEXTEX结构中的CHARRANGE结构就可以完成向前向后搜索
而CHARRANGE结构只有两个参数,即“起始位置”和“终止位置”,于是将起始位置设置为当前光标位置,终止位置设置为文本的起点(0),就应该能达到目的
可惜没时间新建一个工程去做测试一下……Top
9 楼blackboxboyb(jin)回复于 2004-12-03 14:48:06 得分 0
注意:richedit中如果有\r\n 的话,在得到坐标的时候要考虑 加上\r\n的个数!Top
10 楼flyer_2001()回复于 2004-12-03 14:50:09 得分 0
多谢!
先结贴!
如果有解决方案或实例代码请贴到此处,另外开贴给分。非常感谢!Top
11 楼fengqinggao(风清高)回复于 2004-12-03 21:03:20 得分 0
测试中,未果,甚至用了EM_FINDTEXTEX发送消息,都不行,奇怪Top
12 楼flyer_2001()回复于 2004-12-04 01:24:11 得分 0
是啊,不知道为什么?
Top




