我得到了多个选择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);
谢谢!
编辑: 作为 “rrirower” 回答正确, lst.PostMessage(WM_HSCROLL, MAKEWPARAM(SB_THUMBPOSITION, 250), 0);
消息做这项工作。滚动位置从horizScroll
完美运作。我建议两次发布这条消息,因为如果你只做一次,文本会从开始到想要的位置在视觉上重新滚动。当您将文章张贴两次时,文字会保持在正确的位置,并且滚动条会很快到达正确的位置。
只是一个快速猜测,但如果在设置滚动位置后使列表框失效,会发生什么? – 2015-03-03 08:54:26