Как автоматически прокрутить richedit текстовое поле win32 c / Переполнение стека

Вот мой код, который добавляет сообщения в текстовое поле richedit:

CHARFORMAT cf;
memset( &cf, 0, sizeof cf );
cf.cbSize = sizeof cf;
cf.dwMask = CFM_COLOR;
if (getuserofmessage(msg) == myname)
cf.crTextColor = RGB(0,0,255);// <----- the color of the text
else if (getuserofmessage(msg) == "admin")
cf.crTextColor = RGB(255,0,0);// <----- the color of the text
else
cf.crTextColor = RGB(55,200,100);// <----- the color of the text

SendMessage( hwnd , EM_SETCHARFORMAT, (LPARAM)SCF_SELECTION, (LPARAM) &cf);

/*SendMessage(hwnd, EM_SETSEL, 0, -1);
SendMessage(hwnd, EM_SETSEL, -1, -1);
SendMessage(hwnd, EM_REPLACESEL, 0, (LPARAM)msg.c_str());*/
CHARRANGE cr;
cr.cpMin = -1;
cr.cpMax = -1;

// hwnd = rich edit hwnd
SendMessage(hwnd, EM_EXSETSEL, 0, (LPARAM)&cr);
SendMessage(hwnd, EM_REPLACESEL, 0, (LPARAM)msg.c_str());

и вот окно создания для текстового поля richedit:

hwnd=CreateWindowEx(WS_EX_CLIENTEDGE, RICHEDIT_CLASS, "",
ES_READONLY | WS_CHILD | WS_VISIBLE | WS_VSCROLL | ES_MULTILINE | ES_AUTOVSCROLL,
x,
y,
w,
h,
parent,
(HMENU)identifier,
GetModuleHandle(NULL),
NULL);

Но он не выполняет автоматическую прокрутку вниз, когда сообщения в текстовом поле становятся слишком большими для всех, в результате чего пользователю приходится постоянно прокручивать страницу вниз. Все остальные ссылки, сталкивающиеся с этой проблемой, находятся в .NET или c #. Не могу ли я как-нибудь установить курсор на нижнюю часть текстового поля после добавления? или что-то типа того. любая помощь приветствуется. Благодарю.

РЕДАКТИРОВАТЬ:
Я попытался добавить:

DWORD TextSize;
TextSize=GetWindowTextLength(hwnd);
SendMessage(hwnd,EM_SETSEL,TextSize,TextSize);
SendMessage(hwnd,EM_SCROLLCARET,0,0);

после моего кода добавления, поскольку это было решением для кого-то другого, но у меня не сработало

0

Решение

SendMessage(hwnd, WM_VSCROLL, SB_BOTTOM, 0L);

после того, как текст был вставлен, работает лучше всего для меня.

2

Другие решения

Прежде чем вставить текст в

int start_lines, end_lines;
start_lines = SendMessage(hwnd, EM_GETLINECOUNT,0,0);

После того, как текст вставлен,

end_lines = SendMessage(hwnd, EM_GETLINECOUNT,0,0);
SendMessage(hwnd, EM_LINESCROLL, 0, end_lines - start_lines);

1

попробуйте это.

SendMessage(RichEdit1.Handle, WM_VSCROLL, SB_BOTTOM, 0);
0
По вопросам рекламы [email protected]