我有一个从CRichEditCtrl派生的CMyRichEditCtrl。当我调用SetSel时,它将自动滚动CRichEditCtrl的内容,以使插入符号可见。我想避免这种行为。

令我感到困扰的是,此行为在6.0和其他版本之间似乎已更改。

Visual Studio 2010 :http://msdn.microsoft.com/en-us/library/4zek9k1f(v=vs.100).aspx



Visual Studio 6.0 :http://msdn.microsoft.com/en-us/library/aa313352(v=vs.60).aspx



有没有一种方法可以防止在调用SetSel时控件自动滚动?

最佳答案

这不是一件容易的事,但我终于找到了解决方法。

void CMyRichEditCtrl::doStuff()
{
    SetRedraw( FALSE );

    int nOldFirstVisibleLine = GetFirstVisibleLine();

    // Save current selection
    long lMinSel, lMaxSel;
    GetSel( lMinSel, lMaxSel );

    // Do something here
    doSomething();

    // Restore selection
    SetSel( lMinSel, lMaxSel );

    // Prevent the auto-scroll of the control when calling SetSel()
    int nNewFirstVisibleLine = GetFirstVisibleLine();

    if( nOldFirstVisibleLine != nNewFirstVisibleLine )
        LineScroll( nOldFirstVisibleLine - nNewFirstVisibleLine );

    SetRedraw( TRUE );

    RedrawWindow();
 }

关于c++ - CRichEditCtrl防止在SetSel上自动滚动,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20097810/

10-10 03:16