我有两个列表控件,并且都可以分别垂直滚动。
但是我想同步滚动也想隐藏列表 control-1 中的垂直滚动条。
另一方面,如果您垂直滚动列表控件 2,则列表控件 1 应自动向下滚动相同数量的项目,这样两个列表框上的选项应始终出现在同一行中。
如何在 MFC 中实现这一点?
我有两个列表控件,并且都可以分别垂直滚动。
但是我想同步滚动也想隐藏列表 control-1 中的垂直滚动条。
另一方面,如果您垂直滚动列表控件 2,则列表控件 1 应自动向下滚动相同数量的项目,这样两个列表框上的选项应始终出现在同一行中。
如何在 MFC 中实现这一点?
我通过文档在两个列表视图之间建立连接,但最终结果是对从列表控件的 Scroll 成员发出的命令。
所以在主控中处理 ON_WM_VSCROLL(),我实际上有一个自定义通知,但你可能只想从主控中的类似的快捷方式:
if( pS->nSBCode == SB_THUMBTRACK )
GetDocument( )->SetSplitScrollPos( pS->nPos );
无论你如何工作到“SetSplitScrollPos”之类的东西,它最终都会在从站出现:
void CLCtrl::ScrollToVPosition( long inPos )
{
long scroll= ( inPos - curVScrollPos );
Scroll( scroll << 20 );
curVScrollPos= inPos;
}
“滚动”调用是 CListCtrl 成员,因此您可以:
mySlaveCtrl.Scroll( ... );
现在,我很抱歉,但我不记得为什么将 20 转换为 '<< 16' 应该将值移动到 hi_word,但它需要大 16 倍,(20 - 16)。我没有写下所需的评论。
也就是说,处理主控 ON_WM_VSCROLL 可能很简单,并且:
if( pS->nSBCode == SB_THUMBTRACK )
mySlaveCtrl.Scroll( ( ps->pos - curVScrollPos ) << 20 );