У меня есть несколько вариантов выбора CListBox
с горизонтальной полосой прокрутки, включенной и показанной правильно. Проблема в том, что, когда я использую функциюУстановите горизонтальный прокрутки строки CListBox после сброса содержимого
lst.ResetContent()
и заправьте ее назад, я не могу найти способ прокрутки текста в строках обратно в ту же позицию. Я пытался использовать
lst.SetScrollPos(SB_HORZ, horizScroll, TRUE);
, где horizScroll
= lst.GetScrollPos(SB_HORZ);
Это работает правильно на самой полосе прокрутки, но
текст в строке остается не прокручивается (ручной прокруткой функции OK).
Структура моей программы:
CListBox lst;
int horizScroll;
/*Periodically doing code bellow*/
//Get current scroll position
horizScroll = lst.GetScrollPos(SB_HORZ);
//Reset current content
lst.ResetContent();
//Add item into CListBox (UNICODE in my application)
lst.AddString(L"Some longer text then width of CListBox");
//Calculate horizontal extent and set it through
lst.SetHorizontalExtent(calculatedWidth);
//Try to scroll text (scrolls only scroll bar, not text itself)
lst.SetScrollPos(SB_HORZ, horizScroll, TRUE);
UpdateData(FALSE);
Заранее спасибо!
EDIT: Как "rrirower" ответил правильно, lst.PostMessage(WM_HSCROLL, MAKEWPARAM(SB_THUMBPOSITION, 250), 0);
сообщение делает работу. Позиция прокрутки от horizScroll
работает отлично. Я предлагаю отправить это сообщение дважды, потому что, если вы делаете это только один раз, текст прокручивается визуально от начала до желаемой позиции. Когда вы отправляете его дважды, текст визуально остается в правильном положении, а полоса прокрутки быстро приближается к нужному месту.
Просто быстро догадайтесь, но что произойдет, если вы аннулируете окно списка после установки положения прокрутки? –