我CListBox
启用了水平滚动条并正确显示了多项选择。问题是,当我使用函数时
lst.ResetContent()
并将其填满,我找不到将行中的文本滚动回相同位置的方法。我试着用
lst.SetScrollPos(SB_HORZ, horizScroll, TRUE);
, where horizScroll
=lst.GetScrollPos(SB_HORZ);
这在滚动条本身上可以正常工作,但是
行中的文本保持不滚动(手动滚动功能正常)。
我的程序结构是:
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);
提前致谢!
编辑:当“rrrower”回答正确时,
lst.PostMessage(WM_HSCROLL, MAKEWPARAM(SB_THUMBPOSITION, 250), 0);
消息完成了这项工作。horizScroll
完美的滚动位置。我建议发布此消息两次,因为如果您只执行一次,文本会从头到尾重新滚动到想要的位置。当您发布两次时,文本视觉上会停留在正确的位置,滚动条很快就会到达正确的位置。