2013-11-20 4 views
1

У меня есть CMyRichEditCtrl, полученный из CRichEditCtrl. Когда я вызываю SetSel, он автоматически прокручивает содержимое CRichEditCtrl так, чтобы каретка была видна. Я бы хотел избежать этого поведения.CRichEditCtrl предотвращает автоматическую прокрутку на SetSel

Что меня беспокоит, что это поведение изменилось между 6.0 и другими версиями.

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

Каретка помещается в конце выбора, обозначенном тем больше на начало (cpMin или nStartChar) и в конце (cpMax или nEndChar) индексов. Эта функция прокручивает содержимое CRichEditCtrl так, чтобы изображение было видимым.

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

Каретка помещается в конце отбора, указанной большей от начала (cpMin или nStartChar) и в конце (cpMax или nEndChar) Индексы , Эта функция не прокручивает содержимое CRichEditCtrl так, чтобы изображение было видимым.

Есть ли способ предотвратить автоматический прокрутка элемента управления при вызове SetSel?

ответ

1

Это было непросто, но я, наконец, нашел обходное решение.

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(); 
} 
-2

Изменения в

RedrawWindow (0,0, RDW_NOERASE);

Это лучше.

+1

Вы должны добавить это как комментарий к предыдущему ответу от @MasterMind, а не как новый ответ, так как это не отвечает на вопрос OP. –

+0

@ user3073563: Когда я заменяю RedrawWindow() на RedrawWindow (0,0, RDW_NOERASE), RichEditCtrl больше не отображает символы и ведет себя беспорядочно ... вы даже попробовали это, прежде чем говорить, что это лучше? – MasterMind

Смежные вопросы