首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >重置内容后设置CListBox行的水平滚动

重置内容后设置CListBox行的水平滚动
EN

Stack Overflow用户
提问于 2015-03-03 08:32:11
回答 2查看 871关注 0票数 1

我得到了一个多选择的CListBox水平滚动条启用并正确显示。问题是,当我使用函数时

lst.ResetContent()并将其填充回,我无法找到将文本滚动回同一位置的方法。我试着用

lst.SetScrollPos(SB_HORZ, horizScroll, TRUE);,其中horizScroll = lst.GetScrollPos(SB_HORZ);在滚动条本身上正确工作,但是

行中的文本保持不滚动(手动滚动函数确定)。

我的节目结构是:

代码语言:javascript
复制
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完美地工作。我建议张贴这条消息两次,因为如果您只做了一次,文本将从开始重新滚动到想要的位置。当你张贴它两次,文字视觉停留在正确的位置和滚动条只是迅速来到正确的地方。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-03-03 16:08:53

如果我正确地理解了您,您将尝试使用程序代码水平滚动列表框中的文本。如果您使用Spy++,您将看到当您使用鼠标手动滚动时,一系列HSCROLL消息将被发布到列表框控件中。你可以通过这样做完成同样的事情..。

代码语言:javascript
复制
lst.PostMessage(WM_HSCROLL, MAKEWPARAM(SB_THUMBPOSITION, 250), 0);

您需要计算位置(我在上面使用了250个),但是,上面的代码应该将文本和滚动条水平移动。

票数 1
EN

Stack Overflow用户

发布于 2015-03-03 08:59:59

看了一些书后,无效似乎应该能做到这一点。因为我知道您有一个文本行,这应该很好,但是如果画图本身很复杂,并且需要资源,您可以在后者返回的矩形上使用ScrollWindowExInvalidateRect来只重新绘制更改的区域。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28827215

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档