setsCrollInfo()调用后滚动栏藏匿

Scroll bar hide after SetScrollInfo() call

本文关键字:滚动 藏匿 调用 setsCrollInfo      更新时间:2023-10-16

我在滚动条上有问题。我正在尝试在刷新滚动栏之前保存滚动栏位置,然后再次设置保存的位置。我使用以下代码:

SCROLLINFO si;
GetScrollInfo(SB_VERT, &si);
//Then I do stuff related with refresh
SetItemCountEx((int)moElements.GetSize(), LVSICF_NOINVALIDATEALL);
// Then stuff that sort elements...
Invalidate();
SetScrollInfo(SB_VERT,&si);

之后,在没有滚动条的情况下显示了CListCtrl(滚动栏只是隐藏在某个地方),并且在我选择并使用按钮向下移动列表后显示。什么可能导致这种行为?PS:如果我在Invalidate()之前致电SetScrollInfo(SB_VERT,&si)

使用EnsureVisible的方式部分工作。我可以使用EnsureVisible,但是GetTopIndex总是返回0

希望您的setScrollinfo和getsCrollinfo不是Windows API,因为Windows API将HWND作为您的第一个参数。

嗨,我想你应该这样做。

SCROLLINFO si = {};
si.cbSize = sizeof(SCROLLINFO);//This step is always required for backward compatibility
si.fMask = SIF_POS;
GetScrollInfo(Window,SB_VERT,&si);
//Do your stuff.
UINT scrollBarPos = si.nPos;//Save currentPos
SetScrollInfo(Window,SB_VERT,&si,true);
//true parameter will tell Windows to invalidate the screen and redraw.
//No need to call InvalidateRect.