【问题标题】:Weird goings on with SB_THUMBTRACK and listboxSB_THUMBTRACK 和列表框发生了奇怪的事情
【发布时间】:2014-10-09 16:13:20
【问题描述】:

我有一个所有者绘制的列表框(MFC 中的 CListBox),其中包含 100,001 个项目。列表框是带有垂直滚动条的单列。据我所知,它并没有什么特别之处。样式是:

LBS_OWNERDRAWFIXED | LBS_NOINTEGRALHEIGHT | LBS_EXTENDEDSEL | LBS_NODATA | WS_VSCROLL | WS_TABSTOP

我有自己的数据结构,而不是一一插入,我只是执行 pBlistBox->SendMessage(LB_SETCOUNT, 100000, 0) 来设置列表框中的项目数。

我的问题是,当我通过抓住滚动条上的拇指向下滚动列表框时,当它接近 65000+ 时(看不到它是否正好是 65535,但我希望它是),然后它会环绕回到 0。从 WM_DRAWITEM 中抽取的项目是错误的。当我应该接近 70,000 时,项目接近 4,500 左右。如果我一直拖到底部并松开,拇指会弹回 34,454 左右。这似乎是某种限制。但是,如果我按 HOME 或 END 键,它会做正确的事情。如果我使用滚动箭头,它也会做正确的事情。如果我单击向下页面区域,它也会做正确的事情。唯一没有做对的事情是当它通过拇指滚动时 (SB_THUMBTRACK)。

有人知道如何让它正确滚动吗?显然它似乎是某种 16 位限制,但 GetScrollInfo() 表明它知道滚动全部量。

【问题讨论】:

  • 这是answered here
  • WM_VSCROLL 消息报告 WORD 中的位置。

标签: winapi mfc listbox


【解决方案1】:

让您完全控制滚动条。需要调用 GetScrollInfo 或 GetScrollPos

MSDN here 中完整记录了该行为

【讨论】:

  • 我会将此标记为答案。我今天早些时候解决了这个问题。 arx 和 Hans 的 cmets 为我指明了正确的方向。它仍然有些神秘,因为我能够创建一个简单的示例,它可以调用默认的 wndproc。我的主程序中的列表框有很多杂乱无章的问题,在 WM_VSCROLL 处理程序中使用 Get/SetScrollInfo 解决了这个问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-10
  • 2011-12-05
  • 2022-01-22
  • 2013-02-27
  • 2021-09-25
  • 2011-09-16
  • 1970-01-01
相关资源
最近更新 更多