For suggestion #1 - You could either superempose your only vertical scroll bar on top of the list view control, or subclass the ListView control.
Alternatively, you could use the ItemClick() event (clicking items near the bottom of the list) to determine whether more lines need to be loaded.
Don't use LockWindowUpdate - that is meant to be used for processes which need to draw into windows belonging to other processes when do drag-drop. Google OldNewThing LockWindowUpdate for articles explaining how it works and why using this is a bad idea.
It isn't equal to ListView.Visible = False. You can only use one window at a time with this API call.
Use the following SendMessage calls to disable and enable updating.
Private Declare Function SendMessage Lib "User32.dll" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Private Const WM_SETREDRAW As Long = &HB
Private Const SR_ON As Long = 1
Private Const SR_OFF As Long = 0
SendMessage ListView.hWnd, WM_SETREDRAW, SR_OFF, 0&
SendMessage ListView.hWnd, WM_SETREDRAW, SR_ON, 0&