У меня есть элемент управления EDIT создан так:Win32 API: как автоматически прокручивать текст внутри элемента управления 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
);
Как вы можете видеть, что это только для чтения области редактирования, где можно отобразить мульти строки текста. Предполагается, что это консоль, где я могу отображать некоторую информацию для пользователей, когда они используют программу. Я бы хотел, чтобы текстовая область автоматически прокручивалась до самой нижней записи (самой новой) всякий раз, когда добавляется новая строка (или сообщение для пользователя). Я реализовал это:
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, ЬиЕ, LEN + 1); Затем я конвертирую buf в строку и добавляю к этой строке новое сообщение, которое я хочу отобразить. Затем я конвертирую его обратно в массив char и настроил его с помощью SetDlgItemText. Я разделяю строки, используя \ r \ n. Я закодировал это так, потому что я не знал, как добавить строку в элемент управления EDIT по-разному, чем с помощью SetDlgItemText. И он добавляет только одну запись AFAIK - если использовать дважды, я не буду придумывать две записи, добавленные в элемент управления EDIT, но первая будет заменена вторым вызовом функции.
Я попытался сделать это, и результат в том, что он продолжает мигать доверху, а затем снова вниз .. не очень – Marenz