to ouyh12345(五岭散人):
一般情况下采用SetSel通过定位光标的确可以起到滚动作用,但是我处理的是多字符被选择的情况,也就是说SetSel以这样的方式被调用:SetSel(nStart, nEnd);其中nStart和nEnd不相等。在SetSel调用结束以后光标自动在被选中的字符串选中,也就是说如果nStart所代表的字符在CEdit可视范围以外的话根本看不出来它已被选择。我要解决的就是这样的问题。
SetSel只有当nStart和nEnd相等的情况下才能准确的定位光标。

解决方案 »

  1.   

    SetSel
    就可以实现自动滚动
      

  2.   

    你可以使用CEdit类的函数,LineScroll(int nLines,int nChars = 0)
    参1:垂直滚动的行数
    参2:水平滚动的字符数
    由于EditBox类中是像素单位,所以你自己需要换算一下,即换算成字符数即可
      

  3.   

    to zhb1190():
    SetSel只有在两个参数同等大小的情况下才能滚动,CEdit的自动滚动属性会自动滚动让光标处于可见位置。两个参数不一样大的时候SetSel将光标置于被选择的字符串末尾,当你从后往前选择的时候就无法滚动了。
      

  4.   

    to mrdone() :
    我自己处理CEdit子类控件的鼠标拖动选择事件,当鼠标从后往前拖的时候需要告诉用户他目前选择了那些内容,由于控件宽度固定,只能通过滚动来实现。
    to hua2136();
    我也尝试过LineScroll,但是这个函数运行一直无效,不知道为什么。我目前看到的能够实现这个功能的控件基本都是自绘,那样的话代价太大了。