您的位置:程序门 -> vb ->



richtextbox设置滚动条位置的困惑


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


richtextbox设置滚动条位置的困惑
发表于:2007-10-11 17:33:57 楼主
原来我使用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中将滚动条设置为原来的位置呢?
谢谢!
发表于:2007-10-11 22:55:081楼 得分:0
再研究了一下,发现一些问题,但还是没解决:
在textbox和richtextbox中,输入同样的内容,用getscrollrange   text.hwnd,   nbar,   min,   max   得到的滚动条最大值max是不一样的。在测试中,输入9行内容,textbox的max是9,而richtextbox是850。这样,textbox滚动时,是一行一行跳动的。而richtextbox是光滑移动的。可能就是这个max值不一样。max值越大,滚动时越光滑连续。

但是用semdmessage方法,仍不能使得richtextbox到达指定位置。
help!
发表于:2007-10-12 10:23:292楼 得分:0
自己搞定了:
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的滚动条消息截获的数据分析出来的


快速检索

最新资讯
热门点击