簡體   English   中英

CRichEditCtrl防止在SetSel上自動滾動

[英]CRichEditCtrl prevent auto scroll on SetSel

我有一個從CRichEditCtrl派生的CMyRichEditCtrl。 當我調用SetSel時,它將自動滾動CRichEditCtrl的內容,以使插入符號可見。 我想避免這種行為。

令我煩惱的是,此行為在6.0和其他版本之間似乎已更改。

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

插入號放置在由開始索引(cpMin或nStartChar)和結束索引(cpMax或nEndChar)中較大者指示的選擇的末尾。 此函數滾動 CRichEditCtrl的內容,以使插入符號可見。

Visual Studio 6.0http : //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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM