" Аноним 47 " <0@users.rsdn.ru> сообщил/сообщила в новостях следующее:
news:3590304@news.rsdn.ru...
> Привет!
>
> Столкнулся с такой проблемой:
>
> 1) Создаю CRichEditCtrl с параметрами -> WS_HSCROLL | WS_VSCROLL | WS_BORDER | WS_TABSTOP | WS_CHILD | ES_MULTILINE | ES_READONLY
> 2) делаю SetWindowText со длинной строкой, от 4000 чаров.
> 3) CRichEditCtrl разбивает эту строку непонятным образом, делает переносы (где ему вздумается) и вместо одной строки рисует 2 и более.
>
> Нужно:
> 1) писать длинные строки в CRichEditCtrl полностью;
> или в крайнем случае:
> 2) конролируемый перенос, скажем максимальная длина строки — 2000 и всё, что за ней переносится на следующие строки автоматом (без писанины кода).
>
> Подскажите, пожалуйста, как это сделать быстро и просто?
Можно отключить мягкий перенос строк
void CBaseRichEditView::ShowHorzBar(const bool bShow)
{
#ifndef EM_SHOWSCROLLBAR
enum {EM_SHOWSCROLLBAR=WM_USER+96};
#endif
CRichEditCtrl& rich=GetRichEditCtrl();
ASSERT(IsWindow(rich.GetSafeHwnd()));
rich.SendMessage(EM_SHOWSCROLLBAR,SB_HORZ,true == bShow);
CRect r(0,0,0,0);
GetWindowRect(&r);
SetWindowPos(NULL,0,0,r.Width()-1,r.Height()-1,SWP_NOMOVE|SWP_NOREDRAW|SWP_FRAMECHANGED);
SetWindowPos(NULL,0,0,r.Width(),r.Height(),SWP_NOMOVE);
}
bool CBaseRichEditView::SetWrapMode(const bool bWrap)
{
CRichEditCtrl& rich=GetRichEditCtrl();
ASSERT(IsWindow(rich.GetSafeHwnd()));
//#ifndef EM_SHOWSCROLLBAR
// enum {EM_SHOWSCROLLBAR=WM_USER+96};
//#endif
if (!bWrap) {
rich.SetTargetDevice(NULL,1);
// rich.SendMessage(EM_SHOWSCROLLBAR,SB_HORZ,TRUE);
ShowHorzBar(true);
}
else {
//rich.SendMessage(EM_SHOWSCROLLBAR,SB_HORZ,FALSE);
ShowHorzBar(false);
rich.SetTargetDevice(NULL,0);
}
m_bWrapMode=bWrap;
CRect r(0,0,0,0);
GetWindowRect(&r);
SetWindowPos(NULL,0,0,r.Width()-1,r.Height()-1,SWP_NOMOVE|SWP_NOREDRAW|SWP_FRAMECHANGED);
SetWindowPos(NULL,0,0,r.Width(),r.Height(),SWP_NOMOVE);
return true;
}
соответственно юзаем так SetWrapMode(false);
Posted via RSDN NNTP Server 2.1 beta