当前位置:编程学习 > VB >>

richtextbox设置滚动条位置的困惑

原来我使用TEXTBOX,程序需要修改TEXTBOX中的内容,修改后滚动条位置到了第一行。因为需要当前位置不能变,需将滚动条设置为原来的位置。代码如下:
pos = GetScrollPos(Text1.hwnd, nBar) '得到当前滚动条位置
'.....修改text1的内容
lngRet = SendMessage(Text1.hwnd, EM_LINESCROLL, 0, pos) '恢复滚动条位置。

但我用richtextbox代替textbox后,发现得到的滚动条位置有问题了。原来在TEXTBOX中,得到的滚动条位置是几到几十。而在richtextbox时,得到的位置却是几百,几千,因此用SendMessage设置时,只能显示最后一行。
我又用 SetScrollPos(RichTextbox1.hwnd, nBar, pos, 1),此时,滚动条确实是到原来的位置了。但这个只是滚动条位置变化,显示内容还是显示的第一行。必须在滚动条上点一下,才能显示到原来的位置。

不明白为何在richtextbox中得到的位置和textbox有如此大的差异。
如何才能在richtextbox中将滚动条设置为原来的位置呢?
谢谢! --------------------编程问答-------------------- 再研究了一下,发现一些问题,但还是没解决:
在TEXTBOX和RICHTEXTBOX中,输入同样的内容,用GetScrollRange Text.hwnd, nBar, Min, Max 得到的滚动条最大值MAX是不一样的。在测试中,输入9行内容,TEXTBOX的MAX是9,而RICHTEXTBOX是850。这样,TEXTBOX滚动时,是一行一行跳动的。而RICHTEXTBOX是光滑移动的。可能就是这个MAX值不一样。MAX值越大,滚动时越光滑连续。

但是用SEMDMESSAGE方法,仍不能使得RICHTEXTBOX到达指定位置。
HELP! --------------------编程问答-------------------- 自己搞定了:
pos = GetScrollPos(RichTextBox1.hwnd, nBar) 得到当前滚动条位置
RichTextBox1.text=...... 修改其内容,此时滚动条自动到最顶
lngRet = SetScrollPos(RichTextBox1.hwnd, nBar, pos, 1) 将滚动条设置为原来的位置
lngRet = SendMessage(RichTextBox1.hwnd, WM_VSCROLL, pos * 65536 + 5, ByVal &O0) 显示滚动条位置对应的内容

其中的pos * 65536 + 5  是我跟踪richtextbox的滚动条消息截获的数据分析出来的
--------------------编程问答-------------------- 这个 蛮不错的

我回去试一下 --------------------编程问答-------------------- 换个方法,在VC中反正这种方法更方便,就是replace,适合修改部分文本。
补充:VB ,  API
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,