我得到了一个多选择的CListBox水平滚动条启用并正确显示。问题是,当我使用函数时
lst.ResetContent()并将其填充回,我无法找到将文本滚动回同一位置的方法。我试着用
lst.SetScrollPos(SB_HORZ, horizScroll, TRUE);,其中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);提前感谢!
编辑:当"rrirower“正确回答时,lst.PostMessage(WM_HSCROLL, MAKEWPARAM(SB_THUMBPOSITION, 250), 0);消息完成了任务。滚动位置从horizScroll完美地工作。我建议张贴这条消息两次,因为如果您只做了一次,文本将从开始重新滚动到想要的位置。当你张贴它两次,文字视觉停留在正确的位置和滚动条只是迅速来到正确的地方。
发布于 2015-03-03 16:08:53
如果我正确地理解了您,您将尝试使用程序代码水平滚动列表框中的文本。如果您使用Spy++,您将看到当您使用鼠标手动滚动时,一系列HSCROLL消息将被发布到列表框控件中。你可以通过这样做完成同样的事情..。
lst.PostMessage(WM_HSCROLL, MAKEWPARAM(SB_THUMBPOSITION, 250), 0);您需要计算位置(我在上面使用了250个),但是,上面的代码应该将文本和滚动条水平移动。
发布于 2015-03-03 08:59:59
看了一些书后,无效似乎应该能做到这一点。因为我知道您有一个文本行,这应该很好,但是如果画图本身很复杂,并且需要资源,您可以在后者返回的矩形上使用ScrollWindowEx和InvalidateRect来只重新绘制更改的区域。
https://stackoverflow.com/questions/28827215
复制相似问题