我有一个从CRichEditCtrl派生的CMyRichEditCtrl。当我调用SetSel时,它会自动滚动CRichEditCtrl的内容,以便可以看到插入符号。我想避免这种行为。
有什么问题,这种行为似乎在6.0和其他版本之间发生了变化。
Visual Studio 2010 :http://msdn.microsoft.com/en-us/library/4zek9k1f(v=vs.100).aspx
插入符号位于选择的末尾,由start(cpMin或nStartChar)和end(cpMax或nEndChar)索引中的较大者指示。 此函数滚动 CRichEditCtrl的内容,以便插入符号可见。
Visual Studio 6.0 :http://msdn.microsoft.com/en-us/library/aa313352(v=vs.60).aspx
插入符号位于选择的末尾,由start(cpMin或nStartChar)和end(cpMax或nEndChar)索引中的较大者指示。 此函数不会滚动 CRichEditCtrl的内容,以便可以看到插入符。
有没有办法在调用SetSel时阻止控件的自动滚动?
答案 0 :(得分:2)
这不是一件容易的事,但我终于找到了解决方法。
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();
}
答案 1 :(得分:-2)
更改为
RedrawWindow(0,0,RDW_NOERASE);
更好。