subject_19734.htm
来自「一些关于vc的问答」· HTM 代码 · 共 81 行
HTM
81 行
<p>
序号:19734 发表者:Niphen 发表日期:2002-10-31 09:39:59
<br>主题:RichEdit的滚动,滚死我了。
<br>内容:在添加文本(注意,是添加到末尾)的时候,RichEdit可能有也可能没有焦点,RichEdit的状态可能已经滚动了末尾也可能没有,RichEdit中可能选中了一段文本也可能没选中,选中的文本可能在显示范围内也可能在显示范围之外(被滚出了窗口)。<BR><BR> 现在的困难是,无论RichEdit处在哪种情况下,我都希望能够安静的在末尾追加一段文本,安静的意思就是,追加之后RichEdit里除了多了一些文本之外,其他状态均不发生改变,比如,原来有焦点追加之后也保留着焦点,追加之后保持原来的位置而不发生滚动(当然也不希望发生了滚动之后在强制滚回原来的位置,这样会发生抖动的),同时,因为会非常频繁地追加文本并设置其字体,所以可能需要同时防止SelectionText的闪烁。<BR><BR>另外提醒一下,我的实现在RichEdit没有焦点的时候,工作得很好,但是这些代码在<BR>RichEdit获得焦点之后就不能如预期的那样工作了。<BR>
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
回复者:Niphen 回复日期:2002-10-31 11:27:18
<br>内容:大家不要光看不说啊,随便说点什么吧。<BR>我刚刚试验发现RichEdit1.0下好像可以,但是在RichEdit2.0下面并且有焦点的时候就有问题了。<BR><BR>如下代码:<BR><BR> m_edit.HideSelection(TRUE,FALSE);<BR> CHARRANGE old;<BR> m_edit.GetSel(old);<BR> int nStart = GetLen();<BR> m_edit.SetSel(nStart, nStart); //导致滚动到最后<BR> m_edit.ReplaceSel(str);<BR> m_edit.SetSel(old); //导致滚动到光标处<BR> m_edit.HideSelection(FALSE,FALSE);<BR><BR>我希望能消除这些滚动。大家帮忙,谢谢
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:不说 回复日期:2002-10-31 12:08:18
<br>内容:你用这个法子试试:<BR><BR>CString szContents;<BR>m_edit.GetWindowText(szContents);<BR>szContents += str;<BR>m_edit.SetWindowText(szContents);
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:Niphen 回复日期:2002-10-31 12:35:16
<br>内容:呵呵,不行的,RichEdit里面不仅有简单的文本,如果是这样我就不用RichEdit了,这些文本还有丰富的字体信息,甚至还有一些图片。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:不说 回复日期:2002-10-31 12:41:15
<br>内容:我得上班去了呵呵……你等别人的回答吧,或者等俺下了班再帮你试试哈……
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:Niphen 回复日期:2002-10-31 18:55:13
<br>内容:大家再关注关注。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:不说 回复日期:2002-10-31 21:34:51
<br>内容:在我这里试你那段代码没什么问题啊,只有在选中大段文字的时候才会有轻微的闪烁,但都是可以接受的程度。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:Niphen 回复日期:2002-11-01 09:33:30
<br>内容:注意这个!!!!!!!!!!!!!<BR><BR>RichEdit1.0下好像可以,但是在RichEdit2.0下面并且有焦点的时候就有问题了。<BR>RichEdit1.0下好像可以,但是在RichEdit2.0下面并且有焦点的时候就有问题了。<BR>RichEdit1.0下好像可以,但是在RichEdit2.0下面并且有焦点的时候就有问题了。<BR>RichEdit1.0下好像可以,但是在RichEdit2.0下面并且有焦点的时候就有问题了。<BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:Niphen 回复日期:2002-11-01 11:17:16
<br>内容:没有人关注了么? :(
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:凯凯 回复日期:2002-11-01 11:34:12
<br>内容:<BR>yourEdit.SetRedraw (FALSE)<BR>//用你自己的插入操作,并调整位置。<BR>yourEdit.SetRedraw (TRUE)<BR>yourEdit.Invalidate ()<BR><BR>试试这个方法,最近很忙,没法调试,你自己试一下吧。<BR><BR>另外不说同学的方法我用过,少量的数据还可以。当程序连续运行,并插入很多数据时,一段时间后,程序会变得很慢,且吃了巨多的资源。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:Niphen 回复日期:2002-11-01 11:57:46
<br>内容:我用过很多防止在插入时刷新的办法了。<BR><BR>SetRedraw在RichEdit里使用会导致显示不正常,比如时常出现半行文字的情况。<BR>LockUpdateWindow会使得其他桌面上的窗口发生闪烁。<BR>而且使用这两种方法都会发现滚动条仍然在滚动(滚动块在来回的跳动),只是窗口的重画被禁止掉了而已。<BR><BR>另外,我尝试在插入内容之前把焦点移除掉,但是插入完成之后还得把插入点和原来选中的内容复位并重新设置回焦点,一往回设置马上就滚动到插入点去了。唉,难啊。<BR><BR>我查了写字板,这个程序用的是RechEdit20,就有这个特点,大家可以把一大段文本复制进去,然后把插入点放在文本中某个位置,拖动滚动条把插入点滚出显示区,然后把焦点放到令一个控件(比如字体选择下拉列表)中,再点击编辑区的滚动条(此时RichEdit应该重新获得焦点),你就会发现它自动滚动到了你刚才放置插入点的位置。<BR>但是,我查了Msn Messenger和联众游戏里的消息框,它们都是用的RichEdit20,都没有这个问题,可见应该能解决的。大家继续加油帮忙啊。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:不说 回复日期:2002-11-01 14:12:07
<br>内容:现在都是richedit 3.0了,那里来的2.0和1.0啊????<BR><BR>你看看你riched20.dll的版本是不是5.30.23.1209?我在我机器上真的再现不出来你的问题……
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:Niphen 回复日期:2002-11-01 14:12:34
<br>内容:不是我说的太复杂了吧?呵呵,希望大家发扬精神,迎着困难上啊。我已经和它斗争一个星期了。:(
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
<font color=red>答案被接受</font><br>回复者:不说 回复日期:2002-11-01 23:29:08
<br>内容:咋胡~~~!对不起大家…………<BR>2002-11-2 0:36:17
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?