我有一个启用虚拟行的CBCGPGridCtrl (EnableVirtualMode)。数据显示没有问题。在某些事件上(从另一个窗口右键单击),我希望将当前可见的网格部分移动到特定的行。我找不到任何具体的方法来做到这一点。我尝试了几种不同的选择:
我看到手动移动滚动条会导致变量(如:setScrollPos.、m_nLastVisibleItem和m_nVertScrollOffset )的值发生变化,所以我想使用进行复制。
m_grid.SetScrollRange(SB_VERT, 0, size());
//....
m_grid.SetScrollPos(SB_VERT, gotoPosition);但是什么都没有发生,这些变量也没有受到影响。
m_grid.SetCurSel(gotoPosition);这些都没用。
实现这一目标的正确途径是什么?
发布于 2022-10-11 07:25:14
经过一天的不同尝试,我所能找到的唯一解决方案就是让一个CBCGPGridCtrl的子类显式地干预m_nVertScrollOffset的值。
所以,就像这样:
class CChildGrid : public CBCGPGridCtrl
{
public:
void SetScrollPos(int gotoPosition)
{
m_nVertScrollOffset = gotoPosition * m_nRowHeight;
}
};
....
void CFoo::SetGridPosition()
{
m_grid.SetScrollPos(125);
m_grid.AdjustLayout();
}https://stackoverflow.com/questions/74013824
复制相似问题