gpt4 book ai didi

c++ - 重置内容后设置 CListBox 行的水平滚动

转载 作者:行者123 更新时间:2023-11-30 03:55:54 26 4
gpt4 key购买 nike

我得到了一个多选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 中的滚动位置完美运行。我建议将此消息发布两次,因为如果你只发布一次,文本会从头开始重新滚动到所需位置。当您发布两次时,文本在视觉上停留在正确的位置,滚动条很快就会到达正确的位置。

最佳答案

如果我没理解错的话,您是在尝试使用程序代码水平滚动列表框中的文本。如果您使用 Spy++,当您使用鼠标手动滚动时,您会看到一系列 WM_HSCROLL消息被发布到列表框控件。您可以通过这样做来完成同样的事情...

lst.PostMessage(WM_HSCROLL, MAKEWPARAM(SB_THUMBPOSITION, 250), 0);

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

关于c++ - 重置内容后设置 CListBox 行的水平滚动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28827215/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com