У меня есть элемент управления EDIT, созданный так:
hwndEDIT_5 = CreateWindowEx (
0, "EDIT", NULL,
WS_VSCROLL | WS_BORDER | WS_VISIBLE | WS_CHILD | ES_MULTILINE | ES_READONLY,
135, 450, 555, 200,
h2, ( HMENU ) ID_EDIT_CONSOLE,
h1, NULL
);
Как вы можете видеть, это область редактирования EDIT только для чтения, в которой может отображаться многострочный текст.Предполагается, что это будет консоль, где я могу отображать некоторую информацию для пользователей, когда они используют программу.Я хотел бы, чтобы текстовая область автоматически прокручивалась до самой нижней записи (самой новой) при добавлении новой строки (или сообщения для пользователя).Я реализовал это:
SetDlgItemText ( h2, ID_EDIT_CONSOLE, ch_s );
SCROLLINFO scr;
SCROLLINFO * scr_p = &scr;
scr.cbSize = sizeof ( SCROLLINFO );
scr.fMask = SIF_RANGE;
GetScrollInfo ( GetDlgItem ( h2, ID_EDIT_CONSOLE), SB_VERT, scr_p );
int mmax = scr.nMax;
scr.fMask = SIF_POS;
scr.nPos = mmax;
SetScrollInfo ( GetDlgItem ( h2, ID_EDIT_CONSOLE), SB_VERT, scr_p, TRUE );
Этот код прокручивает вертикальную полосу прокрутки до конца элемента управления EDIT после добавления нового сообщения и прекрасно работает, полоса прокрутки прокручивается, но текст по-прежнему остается видимым с начала- после добавления он перематывается в начало, а полоса прокрутки - назад.Как сделать это правильно?
Последнее, но не менее важное - это может быть важно - для того, чтобы отобразить сообщение, сначала я фиксирую текст, который уже отображается, используя: GetDlgItemText (h2, ID_EDIT_CONSOLE, buf, len+ 1);затем я конвертирую buf в строку и добавляю к этой строке новое сообщение, которое я хочу отобразить.Затем я конвертирую его обратно в массив символов и устанавливаю его с помощью SetDlgItemText.Я разделяю строки, используя \ r \ n.Я кодировал это таким образом, потому что я не знал, как добавить строку в элемент управления EDIT иначе, чем с помощью SetDlgItemText.И он добавляет только одну запись AFAIK - при двойном использовании я не буду добавлять две записи, добавленные в элемент управления EDIT, но первая будет заменена вторым вызовом функции.