我有一个从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/