我有一个所有者绘制的列表框(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()显示它知道滚动全部数量。