Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Visual C++/MFC/WTL > Как отменить скроллинг каретки в CRichEditCtrl


Автор: Smalti 15.8.2007, 13:52
Помогите решить проблему!

Есть контрол CRichEditCtrl.
Используется для ведения форматированого лога.
Есть возможность включать/выключать автоскроллинг содержимого контрола по мере добавления(в конец) в него строк:

Код

if(m_autoScrollCheck.GetCheck())
{
    ::PostMessage((HWND)m_flyLog, (UINT)WM_VSCROLL, (WPARAM)SB_BOTTOM, (LPARAM)0);
}


Дальше возникает вопрос. Во время интенсивного(быстрого) заполнения выделяем часть текста - не получается, т.к. каретка уехала сразу же вниз.

Делаем так:

Код

CHARRANGE crOld;
m_flyLog.GetSel(crOld);
m_flyLog.HideSelection(TRUE, FALSE);

m_flyLog.SetSel(m_flyLog.GetTextLength(), m_flyLog.GetTextLength());
m_flyLog.SetSelectionCharFormat(cf);
m_flyLog.ReplaceSel(pStr->c_str());
m_flyLog.SetSel(m_flyLog.GetTextLength(), m_flyLog.GetTextLength());
m_flyLog.ReplaceSel("\r\n");

m_flyLog.SetSel(crOld);
m_flyLog.HideSelection(FALSE, FALSE);


Теперь при выделении текста он дёргаетса(текст) из-за метода SetSel, который дёргает каретку вниз.

Вопрос:
Как добавлять строки вниз так, чтобы не переводить при этом каретку?
Или как можно по-другому решить эту проблему? smile 


Решение точно есть, т.к. в output window MVS можно выделять текст и он не дёргается при максимально быстром добавлении
в него(через TRACE) строк.

Автор: Smalti 16.8.2007, 10:47
Я так понимаю что нужно разбивать на субкласс(замещать оконную процедуру класса окна другой) через SetWindowLong

Автор: Smalti 20.8.2007, 11:32
Спасибо всем за участие!

Вот кому интересно:
http://www.codeproject.com/editctrl/editlog.asp?df=100&forumid=555&exp=0&select=989193&fr=26

Надеюсь в скором времени я смогу это адаптировать к CRichEditCtrl

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)