[英]CRichEditCtrl prevent auto scroll on SetSel
我有一個從CRichEditCtrl派生的CMyRichEditCtrl。 當我調用SetSel時,它將自動滾動CRichEditCtrl的內容,以使插入符號可見。 我想避免這種行為。
令我煩惱的是,此行為在6.0和其他版本之間似乎已更改。
Visual Studio 2010 : http : //msdn.microsoft.com/zh-CN/library/4zek9k1f(v=vs.100).aspx
插入號放置在由開始索引(cpMin或nStartChar)和結束索引(cpMax或nEndChar)中較大者指示的選擇的末尾。 此函數滾動 CRichEditCtrl的內容,以使插入符號可見。
Visual Studio 6.0 : http : //msdn.microsoft.com/zh-CN/library/aa313352( v = vs.60).aspx
插入號放置在由開始索引(cpMin或nStartChar)和結束索引(cpMax或nEndChar)中較大者指示的選擇的末尾。 此功能不會滾動 CRichEditCtrl的內容,因此插入符號是可見的。
有沒有一種方法可以防止在調用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();
}
改成
RedrawWindow(0,0,RDW_NOERASE);
好多了
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.