Re[2]: CRichEditCtrl автоматический перенос
От: riffmaster  
Дата: 11.11.09 07:08
Оценка:
Здравствуйте, Carc, Вы писали:


C>" Аноним 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 и всё, что за ней переносится на следующие строки автоматом (без писанины кода).
>>
>> Подскажите, пожалуйста, как это сделать быстро и просто?

C>Можно отключить мягкий перенос строк


C>void CBaseRichEditView::ShowHorzBar(const bool bShow)

C>{
C>#ifndef EM_SHOWSCROLLBAR
C> enum {EM_SHOWSCROLLBAR=WM_USER+96};
C>#endif

C> CRichEditCtrl& rich=GetRichEditCtrl();

C> ASSERT(IsWindow(rich.GetSafeHwnd()));
C> rich.SendMessage(EM_SHOWSCROLLBAR,SB_HORZ,true == bShow);

C> CRect r(0,0,0,0);

C> GetWindowRect(&r);
C> SetWindowPos(NULL,0,0,r.Width()-1,r.Height()-1,SWP_NOMOVE|SWP_NOREDRAW|SWP_FRAMECHANGED);
C> SetWindowPos(NULL,0,0,r.Width(),r.Height(),SWP_NOMOVE);
C>}
C>bool CBaseRichEditView::SetWrapMode(const bool bWrap)
C>{
C> CRichEditCtrl& rich=GetRichEditCtrl();
C> ASSERT(IsWindow(rich.GetSafeHwnd()));

C>//#ifndef EM_SHOWSCROLLBAR

C>// enum {EM_SHOWSCROLLBAR=WM_USER+96};
C>//#endif

C> if (!bWrap) {

C> rich.SetTargetDevice(NULL,1);
C>// rich.SendMessage(EM_SHOWSCROLLBAR,SB_HORZ,TRUE);
C> ShowHorzBar(true);
C> }
C> else {
C> //rich.SendMessage(EM_SHOWSCROLLBAR,SB_HORZ,FALSE);
C> ShowHorzBar(false);
C> rich.SetTargetDevice(NULL,0);
C> }

C> m_bWrapMode=bWrap;


C> CRect r(0,0,0,0);

C> GetWindowRect(&r);
C> SetWindowPos(NULL,0,0,r.Width()-1,r.Height()-1,SWP_NOMOVE|SWP_NOREDRAW|SWP_FRAMECHANGED);
C> SetWindowPos(NULL,0,0,r.Width(),r.Height(),SWP_NOMOVE);

C> return true;

C>}

C>соответственно юзаем так SetWrapMode(false);


Спасибо! Работает)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.