ListView_EnsureVisible () прокручивает ListView, чтобы сделать элемент видимым, но обычно (но не всегда) размещает элемент рядом с серединой ListView. Чтобы элемент появился сверху, сначала вызовите ListView_EnsureVisible (), затем вызовите ListView_GetTopIndex () для определения верхнего видимого элемента, затем используйте ListView_GetItemIndexRect () для получения высоты и положения обоих элементов, затем рассчитайте вертикальное смещение между ними и, наконец, вызовите ListView_Scroll (). Я делаю это в одном из моих собственных проектов, и он отлично работает.