在SetScrollInfo()调用后隐藏滚动条

时间:2017-10-04 07:34:52

标签: c++ mfc

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

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:如果我在SetScrollInfo(SB_VERT,&si)之前致电Invalidate(),则无任何变化。

EnsureVisible的方式部分有效。我可以使用EnsureVisible,但GetTopIndex始终返回0

1 个答案:

答案 0 :(得分: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.