to ouyh12345(五岭散人):
一般情况下采用SetSel通过定位光标的确可以起到滚动作用,但是我处理的是多字符被选择的情况,也就是说SetSel以这样的方式被调用:SetSel(nStart, nEnd);其中nStart和nEnd不相等。在SetSel调用结束以后光标自动在被选中的字符串选中,也就是说如果nStart所代表的字符在CEdit可视范围以外的话根本看不出来它已被选择。我要解决的就是这样的问题。
SetSel只有当nStart和nEnd相等的情况下才能准确的定位光标。
一般情况下采用SetSel通过定位光标的确可以起到滚动作用,但是我处理的是多字符被选择的情况,也就是说SetSel以这样的方式被调用:SetSel(nStart, nEnd);其中nStart和nEnd不相等。在SetSel调用结束以后光标自动在被选中的字符串选中,也就是说如果nStart所代表的字符在CEdit可视范围以外的话根本看不出来它已被选择。我要解决的就是这样的问题。
SetSel只有当nStart和nEnd相等的情况下才能准确的定位光标。
就可以实现自动滚动
参1:垂直滚动的行数
参2:水平滚动的字符数
由于EditBox类中是像素单位,所以你自己需要换算一下,即换算成字符数即可
SetSel只有在两个参数同等大小的情况下才能滚动,CEdit的自动滚动属性会自动滚动让光标处于可见位置。两个参数不一样大的时候SetSel将光标置于被选择的字符串末尾,当你从后往前选择的时候就无法滚动了。
我自己处理CEdit子类控件的鼠标拖动选择事件,当鼠标从后往前拖的时候需要告诉用户他目前选择了那些内容,由于控件宽度固定,只能通过滚动来实现。
to hua2136();
我也尝试过LineScroll,但是这个函数运行一直无效,不知道为什么。我目前看到的能够实现这个功能的控件基本都是自绘,那样的话代价太大了。