CRichEditCtrl автоматический перенос
От: Аноним  
Дата: 03.11.09 08:15
Оценка:
Привет!

Столкнулся с такой проблемой:

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

Подскажите, пожалуйста, как это сделать быстро и просто?
Re: CRichEditCtrl автоматический перенос
От: Pavel Dvorkin Россия  
Дата: 03.11.09 10:10
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Привет!


А>Столкнулся с такой проблемой:


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

А>Подскажите, пожалуйста, как это сделать быстро и просто?


Changing the Formatting Rectangle
The visibility of an edit control's text is governed by the dimensions of its window rectangle and its formatting rectangle. The window rectangle is the client area of the window containing the edit control. The formatting rectangle is a construct maintained by the system for formatting the text displayed in the window rectangle. When an edit control is first displayed, the two rectangles are identical on the screen. An application can make the formatting rectangle larger than the window rectangle (thereby limiting the visibility of the edit control's text) or smaller than the window rectangle (thereby creating extra white space around the text).

An application can set the coordinates of an edit control's formatting rectangle by sending it an EM_SETRECT message.
With best regards
Pavel Dvorkin
Re: CRichEditCtrl автоматический перенос
От: Carc Россия http://www.amlpages.com/home.php
Дата: 04.11.09 14:26
Оценка: 3 (1)
" Аноним 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
Aml Pages Home
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...
Пока на собственное сообщение не было ответов, его можно удалить.