【发布时间】: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() 表明它知道滚动全部量。
【问题讨论】:
-
WM_VSCROLL 消息报告 WORD 中的位置。