0

我有两个列表控件,并且都可以分别垂直滚动。

但是我想同步滚动也想隐藏列表 control-1 中的垂直滚动条。

另一方面,如果您垂直滚动列表控件 2,则列表控件 1 应自动向下滚动相同数量的项目,这样两个列表框上的选项应始终出现在同一行中。

如何在 MFC 中实现这一点?

在此处输入图像描述

4

1 回答 1

0

我通过文档在两个列表视图之间建立连接,但最终结果是对从列表控件的 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 );
于 2016-04-01T01:12:05.473 回答